我有一个用node.js编写的UDP dgram套接字服务器。 这是来自server.js的代码片段
var PORT = 50000;
var HOST = '0.0.0.0';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" +
address.port);
});
server.on('message', function (message, remote) {
console.log('Message', message);
});
server.bind(PORT, HOST);
我有一个可以连接此服务器的客户端。 这是client.js文件:
var PORT = 50000;
var HOST = '0.0.0.0';
var dgram = require('dgram');
var message = null;
var client = dgram.createSocket('udp4');
client.on('listening', function () {
var address = client.address();
console.log('UDP Server listening on ' + address.address + ":" +
address.port);
});
client.on('message', function (message, remote) {
console.log("got message from server ==> ",remote.address + ':' +
remote.port +' - ' + message);
});
function sendMessage(message) {
if (message) {
client.send(message, 0, message.length, PORT, HOST, function (err,
bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST + ':' + PORT);
// client.close();
});
}
}
Uptil here ...一切都很好.. 我需要的是:
我需要将此客户端代码放入html或jade页面......以便我可以使用浏览器连接到服务器。我无法更改服务器代码:(
答案 0 :(得分:0)
从浏览器中的Javascript,您根本无法进行纯UDP连接。浏览器Javascript甚至不能做普通的TCP套接字。 Javascript可以做到:
因此,如果您希望通过直接浏览器Javascript直接与您的UDP服务器对话,那么您今天就无法做到这一点。
由于不以任何方式更改UDP服务器的限制,这些是我能想到的唯一选项:
编写一个可与您的服务器通信的浏览器插件,然后您的Javascript可以与浏览器插件通信。当然,客户端必须下载并安装浏览器插件。
编写一个可以作为UDP服务器代理的新服务器(可以在node.js中轻松完成)。如果它是webSocket或socket.io服务器,那么新服务器可能效果最好,然后您的浏览器Javascript可以使用webSocket或socket.io直接与代理通信。然后代理将处理与您的UDP服务器的通信。
如果您解除了不修改服务器的限制,如果您将服务器更改为webSocket服务器(或者也许是基于webSocket构建的socket.io并添加了一堆服务器,则服务器设计可以与浏览器Javascript兼容)有用的功能)。
答案 1 :(得分:-2)
尽管他们说它无法完成,但你唯一能够进入常规脚本文件的是require语句。我仍然尝试捆绑该代码,看看它是否有效。
var dgram = require('dgram');
那就是它。如果只有你能想出办法让你的问题得到解决。你可以这样做。查看是否存在此dgram库的客户端版本,您可以在将自己的客户端脚本包含在html / jade文档中之前将其作为脚本包含在内。这可能是一个非常麻烦的解决方案,因为代码/语法甚至可能需要为这样的客户端库进行更改。
我认为更好的选择是使用browserify。 Browserify允许您使用在客户端需要其他文件/库的commonJS标准。因此,例如,如果您开发一个名为main.js的前端文件,您可以按照以下步骤让browserify创建一个包含main.js代码的包以及dgram库中的代码,所有这些都混杂在一起:
1- npm安装browserify 2-进入package.json并按照测试脚本的格式创建一个新的npm脚本(在"脚本"对象内):
"bundle": "browserify path/to/jsfile/main.js -o path/to/outputfile/prod.js"
3-创建html / jade文件并将其链接到browserify将输出的prod.js文件 4-运行您创建的包脚本:
npm run bundle
5-测试html文件。
如果操作正确,上述过程将创建一个包含其中所有要求的prod.js文件。