我必须使用带有ExpressJS路由的Socket.IO。我可以向客户端发出事件,但无法侦听从客户端发出的事件。当我不得不在Express路由中使用套接字时,就会出现这个问题。
我的server.js看起来是这样的:(这里的emit命令有效,但io.sockets.on无效)。我检查过有类似问题的问题,但仍然没有得到明确的答案。
var express = require('express');
var app = express();
var server = app.listen(3000);
var io = socketio(server);
app.set('socketio', io);
app.post('/deploy', function(request, response) {
var io = request.app.get('socketio');
var dapp = "some data";
io.sockets.emit('deploy', dapp);
io.sockets.on('deploy_result', (result) => {
console.log(result);
});
})发布于 2018-04-04 19:36:34
io.sockets.on (或io.on)不会让你监听所有事件,它只是针对“连接”事件。您必须将侦听器附加到每个socket,以便侦听所有事件,如下所示:
io.on('connection', function (socket) {
socket.on('deploy_result', (result) => {
console.log(result)
})
})此外,您似乎正在尝试获取emit的“确认”,在这种情况下,已经存在一种更好的方法-确认回调,只需传递一个回调方法作为额外的参数(在数据之后):
server.jssome(‘connection’,function (io.on){ socket.emit('deploy',{some:'data'},function acknowledgement_callback (result) { console.log(result) }) io.on
socket.on('deploy',(data,acknowledgement_callback) => { //使用data做一些事情//然后调用任何结果的回调: acknowledgement_callback('result') //这将在服务器端触发上面的"acknowledgement_callback“})
发布于 2018-04-04 06:20:03
你将需要安装express和socket.io,例如。在您在代码中可以看到的文件所在的目录中,然后适当地引用这些链接
我已经更新了你的代码,所以express和socket的发布可以正常工作。现在剩下的就是确保你的应用程序按照你喜欢的方式运行了。以下是有关如何安装express https://www.npmjs.com/package/express的链接
var socket = require( './socket.io' );
var express=require('./express');
var app=express();
var server = require('http').createServer(app);
var io = socket.listen( server );
var port = process.env.PORT || 3000;
app.post('/deploy', function(request, response) {
var io = request.app.get('socketio');
var dapp="some data";
io.sockets.emit('deploy',dapp);
io.sockets.on('deploy_result', (result)=>{
console.log(result);
});
})https://stackoverflow.com/questions/49638610
复制相似问题