http - 将 node.js 中的 UDP 套接字从应用程序传输到 HTTP

标签 http sockets node.js udp socket.io

是否可以通过 NodeJS 将来自应用程序的 Socket 传输到 http?

我用 UDP 或 TCP(如果在 UDP 中不可能...)应用程序(在 C++ 中)将我的套接字发送到 NodeJS。

我的 NodeJS 脚本:

var server = dgram.createSocket("udp4"); 
server.on("message", function (content, rinfo) 
{ 
   console.log("socket: " + content + " from " + rinfo.address + ":" + rinfo.port); }); 
   server.on("listening", function () { 
}); 
server.bind(7788);

到目前为止,该功能是否正常,但是如何将我的套接字传输到 Socket.io 呢?

我想将套接字发送到 Socket.io(例如)以将套接字传输到 HTTP。例如,通过使用这样的函数,但不重新建立与 socket.io 的连接:

io.sockets.on('connection', function (socket) { 
    socket.emit(content);
});

谢谢你的帮助。

++ 元。

最佳答案

这是一个完整的示例,其中包含一个 socket.io 服务器、一个发送非常简单页面的 Web 服务器(它只会将所有消息记录到控制台)和一个监听消息的 UDP 套接字,并将它们传递给所有连接的客户端:

var http = require('http'),
    dgram = require('dgram'),
    socketio = require('socket.io');

var app = http.createServer(handleRequest),
    io = socketio.listen(app),
    socket = dgram.createSocket('udp4');

socket.on('message', function(content, rinfo) {
    console.log('got message', content, 'from', rinfo.address, rinfo.port);
    io.sockets.emit('udp message', content.toString());
});

function handleRequest(req, res) {
    res.writeHead(200, {'content-type': 'text/html'});
    res.end("<!doctype html> \
        <html><head> \
        <script src='/socket.io/socket.io.js'></script> \
        <script> \
            var socket = io.connect('localhost', {port: 8000}); \
            socket.on('udp message', function(message) { console.log(message) }); \
        </script></head></html>");
}

socket.bind(7788);
app.listen(8000);

更新:如io.sockets.emit 所示,UDP 端口 7788 上接收到的所有消息都会发送到所有连接的客户端。如果你想根据消息中的某些数据或类似的数据来路由它们,你可以使用 Socket.IO 的“房间”功能:io.sockets.of(someRoom).emit。在 Socket.IO 的连接处理程序中,您可以加入每个客户端到某个房间。

关于http - 将 node.js 中的 UDP 套接字从应用程序传输到 HTTP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9545153/

相关文章:

php - Socket_read() 说 "not a valid resource"

node.js - npm Express install 正在添加额外的依赖项

javascript - AngularJS 中 $http 的错误处理程序

sockets - Erlang Udp 服务器丢弃大量数据包

ios - 这个 curl 请求在 swift 中的等价物是什么

node.js - 使用 node.js、socket.io 和 redis 的一对一聊天应用程序

node.js - 为什么无需在其他文件中使用 `var` 即可访问未声明为 `require` 的变量?

javascript - 为什么我必须在 gulp 中使用vinyl-source-stream?

asp.net-mvc - MVC Web API Angular App ('http://localhost:4200' 已被 CORS 策略阻止)

node.js - Angular2 将参数传递给 web 服务 http GET