这可能吗?
我正在为网络系统编写一个Web管理界面。我需要监听特定的UDP端口并在浏览器中显示它。我可以在javascript中这样做吗? 也;欢迎任何其他想法。
早期编辑:这是另一个想法: 我在服务器端有php和perl支持。 JS可以调用一个php脚本来开始监听,它也会调用一个perl脚本,它有一个无限的侦听器循环,并将收到的消息收集到一个sink变量中。理论上; JS将每2秒轮询一次PHP脚本,获取sink变量并在browser / html上显示它。 但; php脚本如何访问/读取sink变量?并且,perl脚本将如何或何时停止? 对于第一部分,使用文件作为接收器是一个可怕的想法;我将每秒接收10个字符串消息,并且每2秒读取然后清除文件内容。更不用说文件锁机制...... 对于第二部分:我应该把暂停放在某处但是;在哪里?
编辑:是的,我可以选择收听的位置(服务器或客户端)。
edit2:为什么我要在特定端口上侦听UDP消息并在浏览器上显示: 我正在开发的项目有一些特殊的传感器,这些传感器由一些商机专用钥匙激活,这些传感器设备是网络启用的,我已经对它们进行编程,以便在感知到某些东西时发送包含biz-key-info的UDP网络广播消息。 在同一个网络上有很多这些设备,网络管理界面应该有一个页面,用户可以实时或几乎实时地看到发生的事情(约5秒延迟是可以接受的,这就是为什么我有我早期编辑的民意调查每2秒一次。
edit3:我还发现了这个:ActiveSocket这是一个ActiveX组件但是;正如预测它没有在Firefox上工作,也没有关于它的html + JS部分的文档。
答案 0 :(得分:3)
最简单的解决方案是Flash-Brigdem,因为在Javascript中无法直接连接到套接字。
我之前做过类似的事情你可以下载完整的源代码here。您可以运行simpleserver.py(需要python3),然后通过localhost访问index.htm,以便对其进行测试。
另请注意,Flash的安全模型需要端口843上的XML-Document,它将发送
<policy-file-request/>
到套接字。 然后你应该回复:
<?xml version="1.0"?><cross-domain-policy>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>
如果您在端口843上没有运行任何内容,它将向您要连接的端口发送相同的请求。但只有在843请求超时后才会发布。
还有一些其他安全“功能”,但您可以阅读Adobe文档中的那些功能。
答案 1 :(得分:1)
你可以使用隐藏的flash .swf和一些粘合代码来做到这一点。绝对没有纯javascript
答案 2 :(得分:1)
哪台电脑会听?您的服务器或运行Web浏览器的客户端? 你能选择吗?
如果可以在服务器上进行监听,最简单的方法是从PHP网页进行监听,但这不是并发的,所以如果用户点击F5的速度太快,那么一次只有1个php进程可以监听,它不起作用。
另一种解决方案就是如你所说,用任何语言(perl,python)创建一个监听器守护进程,它也是一个HTTP服务器(需要10行代码,导入所需的模块),PHP通过简单的HTTP请求连接到它问它最后发生的事情。守护进程只需要保留尽可能多的历史记录,如果这很短,就把它放在一个简单的数组中。
答案 3 :(得分:0)
Javascript代码无法访问套接字。差不多,您应该能够使用ActiveX在IE6中使用某些东西,但这是您的代码可以使用的唯一平台。
答案 4 :(得分:0)
不,你不能在JavaScript中听套接字。
至于使用脚本语言然后轮询数据,这是可能的,但这种长轮询设置是不寻常的。你为什么希望用这种方式做事?特别是,为什么需要监听特定端口上的流量并将其显示在Web浏览器中?您是要检查运行浏览器的计算机上的网络流量,还是要在不同的计算机上检查浏览器和脚本?通常,网络管理员设置用于远程管理,这就是我提出问题的原因。
可能有更好的方法来实现您的目标,但如果没有关于您尝试编写的应用程序的一些更一般的信息,很难说清楚。