我在我的app.js中使用socket.io,并用express框架配置它,现在当我运行应用程序时,application和socket.io都将启动,我可以在客户端和app.js之间发出消息。
app.js(服务器)
var express = require('express'),
app = express(),
http = require('http'),
server = http.creatServer(app),
socket = require('socket.io'),
io = socket.listen(server);
server.listen(3000);
io.sockets.on('connection', function(client){
client.on('message', function(msg){
io.sockets.emit('message', msg);
});
});
客户:
<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
var server = io.connect('http://127.0.0.1:3000');
server.emit('message', 'Hello World');
</script>
但我想在其他控制器中使用套接字。。。我使用"socket.io-client"(https://npmjs.org/package/socket.io-client)",现在我想接收消息从app.js向所有套接字发出的。
controller.js(服务器)
var io = require('socket.io-client'),
socket = io.connect('127.0.0.1', {
port: 3000
});
socket.on('connect', function(){
console.log('CONNECTED!!');
socket.on('message', function(msg){
console.log("New message:", msg);
});
});
它无法连接!
如果你不在乎谁收到消息,你可以从socket.io进行全局广播。这在控制器内部有效。
您没有使用客户端套接字进行发射。io是socket.io实例,而不是连接的客户端套接字。
服务器内
io.sockets.on('connection', function(client){
client.on('message', function(msg){
client.emit('message', msg);
});
});
如果你需要广播,那么你可以使用io实例
io.socket.sockets.emit('message', msg);
var io = require('../socket/sio').initialize(server);
app.set('socketio', io)
并且在您的控制器中:
var io = req.app.get('socketio');
io.to(socketId).emit('sendData', data);