我必须使用带有ExpressJS路由的Socket.IO。我能够向客户端发出一个事件,但无法监听客户端发出的事件。当我必须使用带有Express路由的套接字时,会出现此问题。
我的__main__
如下所示:(此处server.js
命令有效但emit
没有)。我已经检查了类似问题的问题,但仍然没有得到任何明确的答案。
io.sockets.on
答案 0 :(得分:1)
io.sockets.on
(或io.on
)不会让您收听所有事件,它只是针对“连接”事件。您必须将听众附加到每个socket
才能收听所有事件,例如:
io.on('connection', function (socket) {
socket.on('deploy_result', (result) => {
console.log(result)
})
})
此外,您似乎正在尝试获得emit
的“确认”,在这种情况下,已经存在更好的方法 - 确认回调,只需将回调方法作为附加参数传递(之后)数据):
<强> server.js
强>
io.on('connection', function (socket) {
socket.emit('deploy', {some: 'data'}, function acknowledgement_callback (result) {
console.log(result)
})
})
<强> client.js
强>
socket.on('deploy', (data, acknowledgement_callback) => {
// Do something with `data`
// Then call the callback with any result:
acknowledgement_callback('result')
// This will fire the "acknowledgement_callback" above on server-side
})
答案 1 :(得分:0)
您需要安装express和socket.io例如。在您拥有文件的目录中,您可以在代码中看到,然后适当地引用这些链接
我已更新您的代码,因此快递和套接字的问题将起作用。它现在留给您确保您的应用程序按您喜欢的方式运行。 这里是如何安装快递的链接 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);
});
})