服务端代码
var fs=require(‘fs’); var vm = require(‘vm’);
var journey = require(‘journey/journey’);
var http=require(‘http’);
var url = require(“url”);
var querystring = require(“querystring”);
var connect=require(“connect”);
var jsonData;
var router = new(journey.Router);
router.map(function() {
this.post(/^\/node?(?:\/(\d+)(?:\.\.(\d+))?)?/).bind(function(req, res, data) {
typeMethod(jsonData);
res.sendBody("bbb");
res.send(200);
});
});
var sio = require(‘socket.io’);
var express = require(‘express’); //console.log(express) //var app = module.export = express.createServer();
var app=module.export=http.createServer(function(request, response) {
var body = "";
request.on('data', function(chunk) {
body += chunk;
jsonData = querystring.parse(body);
});
request.on('end', function() {
router.handle(request, body, function(result) {
response.writeHead(result.status, result.headers);
response.end(result.body);
});
});
}).listen(6380); \n```
var socketUser = {};
var queueUser={};
io = sio.listen(app);
io.sockets.on('connection', function (socket){
//响应连接
io.sockets.emit('conn', { text: 'socketId:'+socket.id});
//公共称登陆方法
socket.on('queueLogin', function (data) {
console.log("loginllllllll");
if(!queueUser.hasOwnProperty(socket.id)) {
queueUser[socket.id] = {'c_id':data.c_id,'socket':socket};
//在线人数+1
//onlineCount++;
}
});
//监听断线
socket.on('disconnect', function(){
console.log('-链接断开['+socket.id+']-');
delete queueUser[socket.id];
});
});
//推送给一个在线的人
var pushOne = function(data){
console.log('-推送数据['+data+']-');
var ioData=data;
for(var values in queueUser){
if(queueUser[values].c_id==ioData.openId){
console.log('匹配人员'+ioData.openId);
queueUser[values].socket.emit('receiveWeight',{'data': ioData});
break;
}
}
};
var typeMethod=function(data,req,res){
var param=eval("("+data.data+")");
var type=eval("("+data.type+")");
switch(type){
case 1:
pushOne(param);
break;
}
};
客户端代码
var socket=‘';
function connSocketIO(openId){
socket = io.connect(ip+":6380",
{
"reconnect":false,
//"reconnect":false,
"auto connect":false,
//"reconnectionDelay":100,
"connect timeout":100
}
);
socket.on('conn', function (data) {
var postdata = {
'c_id' : openId, //用户id
};
socket.emit('queueLogin', postdata);
});
//接收体重数据
socket.on('receiveWeight', function (data,fn) {
console.log("1");
});
socket.connect();
}
现在是遇到,我发一个post请求访问node.js,调用一次相应的方法,然后出现接收到多次消息的问题,例如:理想是页面接收一次’你好‘的消息,实际接收到多次’你好‘
现在是运用在手机web上的,然后是有一定几率会出现,重复执行多次也没有规律,多的有6-7次,所以重现起来都很难
代码都用md语法处理一下比较好,阅读起来比较难,现在
@dayuoba 好的谢谢
-
社区的编辑器是支持MD的,尽量还是不要用图片来显示代码,应为不同屏幕效果可能不一样,不少用户是用手机客户端,阅读难。
-
你没有提供你的控制台信息
-
你的问题应该通过添加一些console.log()追踪一下就可以解决
我是新手发帖,谢谢提醒,控制台追踪的时候只出现过,
var app=module.export=http.createServer(function(request, response) {
var body = “”;
request.on(‘data’, function(chunk) {
body += chunk;
jsonData = querystring.parse(body);
});
request.on(‘end’, function() {
router.handle(request, body, function(result) {
response.writeHead(result.status, result.headers);
response.end(result.body);
});
});
}).listen(6380);
这里面的请求有过重复执行,不过还是没找到原因,问题还不知道怎么重现,不是每次都会出现的。控制台信息随后跟上。
你这样就已经缩小问题范围了,你的意思是http的request事件出发多次 事实上用浏览器访问http服务器是会有两次request的,有一次是请求favicon
var http = require('http');
var server = http.Server(function(req, res) {
console.log('request');
res.end('hello world');
});
server.listen(8080);
你用浏览器访问localhost:8080
就能打印两次request
@dayuoba 这个我排除了,我用在手机web上的,然后是有一定几率会出现,重复执行多次也没有规律,多的有6-7次,所以重现起来都很难
请问这个问题最终怎么解决,我也遇到这个问题,很是纠结,请各位大神指点指点。。谢谢
请问这个问题最终怎么解决,我也遇到这个问题,很是纠结,请各位大神指点指点。。谢谢
@djt-alsan 先保证进程只有一个,如果还会发生就不懂了,我这边也没有解决,不是每次都会出现,偶尔
找到可能原因所在,如果在模板文件或者html文件里面有多个脚本文件引入,客户端就会多次发送请求,触发多次connection事件,另外img图片资源请求等等都有可能触发多次吧