Node js,从http服务器调用WebSocket服务器 [英] Node js, Call WebSocket server from http server

查看:44
本文介绍了Node js,从http服务器调用WebSocket服务器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆