我是Socket.io的新手,所以我在这里遵循本教程的步骤
我试图从客户机向服务器发送一个值,然后进行一些计算,并将新值发送到客户机的另一个视图。这是我到目前为止的代码:
server.js
var express = require('express');
var app = express();
var http = require('http').Server(app);
var io = require('socket.io')(http);
io.on('connection', function(socket){
socket.on('fromClient', function(data){
console.log(data);
//calculations will be here, not relevant
socket.emit('fromServer', data);
});
// socket.send(req.query.gid);
socket.on('disconnect', function () {
});
});
client.js(应该接收'from server'发射的部分,这是一个角控制器)
var socket = io();
socket.on('fromServer', function(data){
console.log(data);
});
我知道“from client”端是工作的,因为它可以打印数据的值,但是它不打印“from server”的值。我不确定这里的问题是Socket.on中的Socket.emit从未被调用(服务器),还是Socket.on('from server')不工作(客户端)。
为了记录在案,我做了另一个测试,它确实有效,但它只是与Express。另一方面,我试图在我的项目中使用socket.On之外的socket.send和socket.emit,结果成功了,所以我不确定它是否与angular有关,是io.On('connection')事件,还是只是嵌套。
看来没人想回答我的问题。。。
它是socket.emit,看起来它并没有将它发送给其他人,而是发送给同一个客户机,这就是为什么我能够在测试中看到它(只有一个视图),但在我的实际项目中却看不到它。
答案是io.sockets.emit(。。。)
当您在同一个套接字内使用套接字事件时,请始终通过IO调用该事件。我在我的项目中使用了这个,它很有效
答案是io.emit(。。。)
var io = require('socket.io')(strapi.server);
io.on('connection', async function(socket) {
socket.on('getQuestionNext', (data)=>{
io.emit('question', {message : 1})
})
}