Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用nodejs连接到live server上的socket.io_Javascript_Node.js_Websocket_Socket.io - Fatal编程技术网

Javascript 如何使用nodejs连接到live server上的socket.io

Javascript 如何使用nodejs连接到live server上的socket.io,javascript,node.js,websocket,socket.io,Javascript,Node.js,Websocket,Socket.io,将近一个星期了,我在将node.js应用程序上线时遇到了麻烦。我有一个共享主机,我在其中创建了一个子域(比如说sub.domain.com),该子域指向一个directoy/home/wproj/myapp,其中包含我的nodejs应用程序的代码。我使用SSH登录到服务器,并严格执行以下命令 cd myapp node index.js 现在节点应用程序已在端口3000上启动,但我无法从浏览器访问其网页。因此,我使用了一个.htaccess文件,其中包含以下代码 RewriteEngine O

将近一个星期了,我在将node.js应用程序上线时遇到了麻烦。我有一个共享主机,我在其中创建了一个子域(比如说
sub.domain.com
),该子域指向一个directoy
/home/wproj/myapp
,其中包含我的nodejs应用程序的代码。我使用SSH登录到服务器,并严格执行以下命令

cd myapp
node index.js
现在节点应用程序已在端口3000上启动,但我无法从浏览器访问其网页。因此,我使用了一个
.htaccess
文件,其中包含以下代码

RewriteEngine On
RewriteRule ^$ http://127.0.0.1:3000/ [P,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ http://127.0.0.1:3000/$1 [P,L]
现在我可以在
http://sub.domain.com/
。但问题是,我的服务器正在发出套接字,但客户端无法连接到该套接字。在本地服务器上,它运行得非常好,我访问了数百个已经提出的问题,但我似乎没有找到任何解决方案。在浏览器控制台中,它表示

Firefox can’t establish a connection to the server at ws://sub.domain.com/socket.io/?EIO=3&transport=websocket&sid=pItfylCcSBwvBrGaAAAZ.
我的客户端代码如下所示

const socket = io.connect("http://sub.domain.com/");
我也试着像这样输入端口号

const socket = io.connect("http://sub.domain.com:3000/");
它也不起作用。还尝试将
127.0.0.1:3000
替换为
http://sub.domain.com:3000
但插座未连接且始终返回
404

我很抱歉问了这么长的问题,但我必须把整个故事讲出来。如果有人能帮我或给我指出正确的方向,我将不胜感激


谢谢。

您需要开放3000端口,以供进出口流量使用。因为它是一个共享主机,所以在向支持人员写入票据之前,您需要检查自己是否可以从管理面板(例如cPanel)执行此操作

您可以运行此命令
grep-w 3000/tcp/etc/services
,查看端口是否显示在正在运行的服务列表中


您可以通过Web开发工具(浏览器中的Ctrl+Shift+I)调查网络面板。如果您看到请求的资源上没有“Access Control Allow Origin”头。错误,那么您需要像这样启动服务器:
io=require('socket.io')(httpServer,{'origins':'sub.domain.com:'})

,因为您提到了一个
.htaccess
文件,我假设您使用的是Apache。您需要在其上启用
代理\u wstunnel
,并配置反向代理以将传入的ws连接绑定到端口3000。更多信息如果端口3000未打开,那么节点不应该启动我的应用程序。如果应用程序正在启动,我可以在网页上看到它的一些内容,这意味着端口3000已打开alreay@Asadullah正在关闭的端口并不意味着您无法启动应用程序。你的服务器就是不允许它与外界通信。也就是说,是的,如果您可以看到应用程序的某些部分在该端口上运行,那么它是打开的。但显然只有在http(s?协议中,您才知道这意味着端口80。应用程序可以在任何端口启动,但要通过web访问它,端口3000应该是打开的。@b ITICA是的,我可以在sub.domain.com上看到它,这让我更困惑,因为我在端口80访问它,它显示了应用程序的某些部分。只是插座没有连接。然而,当我尝试从这个URL sub.domain.com:3000访问时,它会加载15-20秒,然后给出错误消息。好的,我会确定端口3000是否打开,有没有办法从SSH检查它?