如何在套接字函数之外使用(socket.io)发射函数-nodejs,express
Posted
技术标签:
【中文标题】如何在套接字函数之外使用(socket.io)发射函数-nodejs,express【英文标题】:How to use (socket.io)emit function outside of socket function - nodejs,express 【发布时间】:2018-01-08 04:24:08 【问题描述】:我有以下代码
var app = require('express')();
var http = require('http');
var server = http.createServer();
var socket = require('socket.io');
var io = socket.listen( server );
io.sockets.on('connection', function(socket)
console.log('socket connected');
socket.broadcast.emit('newUser', 'New User Joined, Say Hi :D');
socket.on('serverEmit',function(msg)
console.log('works');
);
socket.on('chatMessage', function(msg)
io.emit('server_emit', msg);
console.log(msg);
);
);
server.listen(3500, function()
console.log('listening on *:3500');
);
所以我的问题是如何在这个套接字连接之外添加一个发射函数。例如,如果我有如下的获取请求
app.get('/link',function(req,res)
io.sockets.emit('trigger','triggered'); // Process I want to make
);
提前致谢。
【问题讨论】:
关注链接以获得更好的socket.io实践Link 关注链接以获得更好的socket.io实践Link 关注链接以获得更好的socket.io实践Link 【参考方案1】:你差点就吃完了:
是io.emit('trigger','triggered');
如果你需要发射到命名空间,你可以这样做:
const namespace = io.of("name_of_your_namespace");
namespace.emit('trigger','triggered');
【讨论】:
【参考方案2】:您需要先导出您的 io,以便它可以重复使用。
socket-setup.js
const socket = require("socket.io")
let _io;
const setIO = (server) =>
_io = socket(server,
cors :
origin : "*",
headers :
"Access-Control-Allow-Origin" : "*"
)
return _io
const getIO = () =>
return _io
module.exports =
getIO,
setIO
然后在您的应用入口文件 (index.js
) 中,设置您的 io。
const app = express()
const server = http.createServer(app)
let io = setIO(server)
io.on("connection", socket =>
//Your job
)
然后在任何地方,例如message.js
你想发出事件。你可以像这样使用io。
const onMessageRecieved = () =>
try
getIO().emit("hello", "Bye")
catch (error)
console.log(error);
就是这样。享受吧。
【讨论】:
是否可以将io.on("connection", socket => //Your job )
放在app.js
之外 - 如果是这样,那之后您将如何将其“包含”在app.js
中?我正在进行重构并尝试尽可能多地清理app.js
,我有一个更多上下文的问题here。
这是公认的答案吗?以上是关于如何在套接字函数之外使用(socket.io)发射函数-nodejs,express的主要内容,如果未能解决你的问题,请参考以下文章
在 NestJs 中使用 Socket IO 加入和发射到房间
Android socket.IO中的Emit或Ack超时处理?