我想学习webSocket,所以我使用symfony和Ratchet库。
我遵循了Ratchet的文档,创建了Chat类和服务器。 当我在linux控制台中进行测试时,一切正常,建立了连接并将消息发送到所有已连接的客户端。
但是当我将此javascript代码放在树枝文件中以在浏览器中对其进行测试时:
<body>
<h1>Websokets chat</h1>
<script>
var conn = new WebSocket('ws://localhost:8080');
conn.onopen = function(e) {
console.log("Connection established!");
};
conn.onmessage = function(e) {
console.log(e.data);
};
</script>
</body>
我得到这个错误:
聊天:8与“ ws:// localhost:8080 /”的WebSocket连接失败:WebSocket握手期间出错:net :: ERR_INVALID_HTTP_RESPONSE (匿名)@ chat:8
这是运行服务器的Command的代码:
<?php
namespace App\Command;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Ratchet\Server\IoServer;
use App\Server\Chat;
class ChatServerCommand extends ContainerAwareCommand
{
protected function configure()
{
$this
->setName('hous:app:chat-server')
->setDescription('Start chat server');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$server = IoServer::factory(
new Chat(),
8080,
'127.0.0.1'
);
$server->run();
}
}
已解决:
我已经这样更改了服务器内部的代码:
protected function execute(InputInterface $input, OutputInterface $output)
{
$server = IoServer::factory(
new HttpServer(
new WsServer(
new Chat()
)
), 8080);
$server->run();
}