2017-09-25 88 views
0

更新连接插座我有下面的代码节点服务器在它:SocketIO:从URL

var server = require('http').createServer(handler); 
var io = require('socket.io')(server); 
var fs = require('fs'); 

function handler(request,response) { 
    if (request.url == '/123') { 
     // The following line says that socket is undefined. 
     //socket.emit('case_updated', 123); 
    } 
    response.writeHead(200, {'Location' : '/'}); 
    return response.end(''); 
} 

io.sockets.on('connection', function (socket) { 
    socket.on('case_updated', function(caseNumber){ 
     socket.broadcast.emit('case_updated', caseNumber); 
    }); 
}); 

server.listen(3000); 

现在我想有socket.broadcast.emit被触发,当URL被访问。

回答

0

找到了问题的解决方案。

我刚安装了socket.io-client包,在服务器的同一个地方,并在服务器代码中实例化了客户端,我能够玩socket.emit函数。在if语句中的处理函数中,我正在创建一个客户端。

var server = require('http').createServer(handler); 
var io = require('socket.io')(server); 
var fs = require('fs'); 

function handler(request,response) { 
    if (request.url == '/123') { 
     //192.168.2.100 is the ip of the same server where this code is located. 
     var socket_client = require("socket.io-client")('http://192.168.2.100:3000'); 
     socket_client.on('connect', function() { 
      socket_client.emit('case_updated', 123); 
     }); 
    } 
    response.writeHead(200, {'Location' : '/'}); 
    return response.end(''); 
} 

io.sockets.on('connection', function (socket) { 
    socket.on('case_updated', function(caseNumber){ 
     socket.broadcast.emit('case_updated', caseNumber); 
    }); 
}); 

server.listen(3000); 
+0

另一种解决方案应该是:将你的路由处理封装在'io.socket.on('connection')'中。我猜一眼就看不到可读性了,但是阻止使用另一个套接字客户端。 – mJehanno