Node js,从http服务器调用WebSocket服务器 [英] Node js, Call WebSocket server from http server
问题描述
我有一个 node js(由 express js 支持)http 应用程序.所以我有一个 server.js
文件如下(没有完整的代码).
I have a node js ( supported by express js ) http application. So I had a server.js
file as follows(not there complete code).
var app = require('./app/app');
var server = http.createServer(app);
server.listen(port, host);
server.on('error', onError);
server.on('listening', onListening);
我后来在那里添加了 websocket 服务器.所以现在是这样.
I later added websocket server to there. So it is like this now.
// app server
var app = require('./app/app');
var server = http.createServer(app);
server.listen(port, host);
server.on('error', onError);
server.on('listening', onListening);
/**
* websocker Server
*/
var WebSocket = require('ws');
var wsServer = http.createServer();
var url = require('url');
var WebSocketServer = require('ws').Server;
var wss = new WebSocketServer({ server: wsServer });
var express = require('express');
var wsApp = express();
var port = 1337;
wsApp.use(function (req, res) {
res.send({ msg: 'hello' });
});
wss.on('connection', function connection(ws) {
console.log((new Date()) + ' Connection from origin ');
ws.on('message', function incoming(message) {
console.log('received: %s', message);
var json = JSON.stringify({ type:'message', data: {hello : 'hello'} });
ws.send(json);
});
var json = JSON.stringify({ type:'message', data: {hello : 'hello'} });
ws.send(json);
});
wsServer.on('request', wsApp);
wsServer.listen(port, function () { console.log('Ws server Listening on ' + wsServer.address().port); });
现在这两个工作很愉快.我想要的是对 http 服务器的 POST
调用,我想触发 Web 套接字服务器向所有客户端广播一些内容.我的问题是如何从 http 服务器触发 websocket 服务器?http 服务器的路由在 app.js
文件中定义.从那里我如何调用 websocker 服务器功能?
Now these two are working happily. What I want is on a POST
call to the http server, I want to trigger the web socket server to broadcast something to all clients. My problem is How I can trigger websocket server from http server?
Routes of http server is defined in app.js
file. from there how can I call websocker server function?
推荐答案
如果您将 ws 功能封装在一个 javascript 文件(例如:websocket.js)中,您可以将您的 websocket 对象导出为一个模块.
If you encapsulate your ws functionality in one single javascript file (e.g: websocket.js) you could export your websocket object as a module.
module.exports = wss;
然后在你的 http 控制器中要求它
and then require it in your http controller
var wss = require(websocket.js)
在这种情况下,应该很容易使用 wss.send({...})
任何你喜欢的地方.
In this case it should be easy to use wss.send({...})
wherever you like.
这篇关于Node js,从http服务器调用WebSocket服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!