Nik*_*hil 5 html javascript sockets udp node.js
我有一个用 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);
Run Code Online (Sandbox Code Playgroud)
我有一个可以与该服务器连接的客户端。这是 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();
});
}
}
Run Code Online (Sandbox Code Playgroud)
直到这里......一切都很好...... 我需要的是:
我需要将此客户端代码放入 html 或 jade 页面中...以便我可以使用浏览器连接到服务器。我无法更改服务器代码:(
从浏览器中的 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 兼容)。
Vic*_*eno -8
尽管他们说这是不可能完成的,但唯一不能塞进常规脚本文件的是 require 语句。我仍然会尝试将代码捆绑起来,看看它是否有效。
var dgram = require('dgram');
Run Code Online (Sandbox Code Playgroud)
就是这样。如果你能找到一种方法将其放入其中,那么你的问题就全部解决了。您可以通过多种方式做到这一点。看看是否有这个 dgram 库的客户端版本,您可以在将自己的客户端脚本包含到 html/jade 文档中之前将其作为脚本包含在内。这可能是一个非常麻烦的解决方案,因为甚至可能需要针对这样的客户端库更改代码/语法。
我相信更好的选择是使用 browserify。Browserify 允许您使用在客户端需要其他文件/库的 commonJS 标准。因此,例如,如果您开发一个名为 main.js 的前端文件,您可以按照以下步骤让 browserify 使用您的 main.js 代码以及 dgram 库中的代码创建一个捆绑包,所有这些都混杂在一起:
1- npm install browserify 2- 进入 package.json 并按照测试脚本的格式创建一个新的 npm 脚本(在“scripts”对象内):
"bundle": "browserify path/to/jsfile/main.js -o path/to/outputfile/prod.js"
Run Code Online (Sandbox Code Playgroud)
3- 创建 html/jade 文件并将其链接到 browserify 将输出的 prod.js 文件 4- 运行您创建的捆绑脚本:
npm run bundle
Run Code Online (Sandbox Code Playgroud)
5-测试 html 文件。
如果正确完成,上述过程将创建一个 prod.js 文件,其中包含所有需求。
| 归档时间: |
|
| 查看次数: |
10310 次 |
| 最近记录: |