我有一个棘轮聊天服务器文件
use Ratchet\Server\IoServer;
use Ratchet\WebSocket\WsServer;
use MyAppChat\Chat;
require dirname(__DIR__) . '/vendor/autoload.php';
$server = IoServer::factory(
new WsServer(
new Chat()
)
, 26666
);
$server->run();
Run Code Online (Sandbox Code Playgroud)
我使用Websocket连接,ws它工作正常
if ("WebSocket" in window) {
var ws = new WebSocket("ws://ratchet.mydomain.org:8888");
ws.onopen = function() {
// Web Socket is connected. You can send data by send() method.
ws.send("message to send");
};
ws.onmessage = function (evt) {
var received_msg = evt.data;
};
ws.onclose = function() {
// websocket is closed.
};
} else {
// the …Run Code Online (Sandbox Code Playgroud) 我最近设置了一个EC2实例(在没有负载均衡器的VPC中),不可否认配置有点奇怪,但它是我们运行的Web应用程序所需要的.
Web服务器(在Haskell中)在端口4433上运行(标准端口是为Apache实例保留的),并且正在接收从另一个系统广播的UDP数据包.我有很多端口是开放的(仅在测试期间),如此处所示(来自安全组):
Custom TCP Rule 4433 tcp 0.0.0.0/0 ?
Custom TCP Rule 8080 tcp 0.0.0.0/0 ?
SSH 22 tcp 0.0.0.0/0 ?
HTTP 80 tcp 0.0.0.0/0 ?
HTTPS 443 tcp 0.0.0.0/0 ?
Custom UDP Rule 30090 udp 0.0.0.0/0 ?
Custom UDP Rule 30089 udp 0.0.0.0/0 ?
Run Code Online (Sandbox Code Playgroud)
TCP套接字的JavaScript请求在同一端口上设置套接字(使用分配给AWS公共IP的URL),这是请求返回错误的位置:
与'wss:// [URL]:4433/projects/socket'的WebSocket连接失败:WebSocket打开握手被取消.
将套接字绑定到0.0.0.0会导致相同的错误.
为了启动Haskell Web服务器,我必须引用AWS提供的内部 IP,因为它在引用弹性IP服务提供的公共 IP 时不会运行.想到这就是问题出现的地方我把套接字请求改成了这个......
wss://[internal ip]:4433/projects/socket
Run Code Online (Sandbox Code Playgroud)
这会改变错误:
与'wss:// [内部IP]:4433/projects/socket'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_REFUSED
这个错误对我来说很有意义,因为外部世界无法获得内部IP.
我在AWS上的websockets上阅读的所有内容都涉及ELB(Elastic Load Balancer),而我不需要其中的一个.我已经尝试了所有当前发布的答案中的所有内容(有些问题甚至没有得到答案),但无济于事.我还设置了亚马逊(近24小时前)的支持案例,该案例尚未收到回复.
导航到http://[URL]:4433/projects/socket'WebSocket Available',其中URL是我们希望使用的URL以及AWS提供的公共DNS.
运行netstat -plunt显示以下内容:
tcp 0 0 0.0.0.0:22 …Run Code Online (Sandbox Code Playgroud) 我打算使用socket.io将客户端连接到服务器套接字。当我使用http时,一切正常,但是当我尝试使用https时,客户端无法连接。
我尝试使用http require('https')和证书创建服务器,但是没有用。
现在,经过一些代码更改和测试之后,这就是我的代码:
服务器index.js
var https = require('https');
var app = express();
var options = {
key: fs.readFileSync('./server-key.pem'),
cert: fs.readFileSync('./server-crt.pem'),
ca: fs.readFileSync('./ca-crt.pem'),
requestCert: false,
rejectUnauthorized: false
};
var server = https.createServer(options, app);¡
var io = require('socket.io')(server);
server.listen(3003, function() {
console.log('server up and running at %s port', 3003);
});
io.on('connection', function(client){
console.log("NUEVO CLIENTE");
client.on('event', function(data){});
client.on('disconnect', function(){});
client.on('setRoom', function(room) {
client.room = room;
client.join(room);
});
client.on('leaveRroom', function(room) {
client.leave(room);
});
});
Run Code Online (Sandbox Code Playgroud)
使用端口3003,服务器连接始终成功。
客户
$scope.socket = io.connect('https://socket.softgym.com/', { transports: ['websocket'],rejectUnauthorized: false}); …Run Code Online (Sandbox Code Playgroud) websocket ×2
amazon-ec2 ×1
angular ×1
apache ×1
javascript ×1
node.js ×1
php ×1
ratchet ×1
socket.io ×1
ssl ×1