Php 棘轮网套罐';无法从客户端接收数据?
我有一个带有Symfony框架的实时web应用程序。我需要将数据从客户端发送到webscket服务器。因此我尝试了以下方法:Php 棘轮网套罐';无法从客户端接收数据?,php,symfony,websocket,ratchet,Php,Symfony,Websocket,Ratchet,我有一个带有Symfony框架的实时web应用程序。我需要将数据从客户端发送到webscket服务器。因此我尝试了以下方法: var conn = new WebSocket('ws://127.0.0.1:8080'); console.log (conn); conn.onopen = function (e) { console.log ("Connection established!"); con
var conn = new WebSocket('ws://127.0.0.1:8080');
console.log (conn);
conn.onopen = function (e) {
console.log ("Connection established!");
conn.send("xoxo");
};
它没有显示任何错误,在服务器端,我有以下内容:
服务器代码:
$app=new AggregateApplication();
$loop = \React\EventLoop\Factory::create();
$context = new \React\ZMQ\Context($loop);
$pull = $context->getSocket(\ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555');
$pull->on('message', array($app, 'EditMessage'));
$webSock = new \React\Socket\Server($loop);
$webSock->listen(8080, '127.0.0.1');
$handler = $this->getContainer()->get('session.handler');
$server=new \Ratchet\Wamp\WampServer($app);
$server = new SessionProvider($server, $handler);
$webServer = new \Ratchet\Server\IoServer(new \Ratchet\WebSocket\WsServer($server),$webSock);
$loop->run();
这是我的应用程序代码:
class AggregateApplication implements WampServerInterface {
protected $clients;
protected $comming;
public function __construct() {
$this->clients = array();
$this->comming = array();
}
public function onOpen(ConnectionInterface $conn){
$this->clients[array_shift($this->comming)]=$conn;
echo "New connection! ".array_shift($this->comming)." ({$conn->resourceId})\n";
}
public function onCall(ConnectionInterface $conn, $id, $topic, array $params){
}
public function onSubscribe(ConnectionInterface $conn, $topic){
echo "onSubscribe";
}
public function onUnSubscribe(ConnectionInterface $conn, $topic){
}
public function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude, array $eligible){
}
public function onClose(ConnectionInterface $conn) {
unset($this->clients[array_search($conn, $this->clients)]);
echo 'close connection ';
}
public function onError(ConnectionInterface $conn, \Exception $e) {
}
}
我找不到的问题是我将捕获客户端发送的消息?您的消息不符合。查看一下您的客户端连接。还可以看一下,它有一个功能示例。请记住,只是对Push Integration()的建议。您可以使用纯javascript在客户端处理此机制,而无需使用任何库,例如 服务器代码:
// Create loop for listen
$loop = React\EventLoop\Factory::create();
$pusher = new Pusher;
// Listen for the web server to make a ZeroMQ push after an ajax request
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('tcp://127.0.0.1:5555'); // Binding to 127.0.0.1 means the only client that can connect is itself
$pull->on('message', array($pusher, 'onBlogEntry'));
// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '127.0.0.1'); // Binding to 127.0.0.1 means remotes can connect
$webServer = new Ratchet\Server\IoServer(
new Ratchet\WebSocket\WsServer(
$pusher
), $webSock
);
// run server for listen websocket base connection
$loop->run();
您的应用程序代码不需要为消息模式设置主题类(WAMP类),因此不需要使用WAMP和AutobahnJS
应用程序代码,例如:
class Pusher implements MessageComponentInterface {
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {}
public function onMessage(ConnectionInterface $from, $msg) {}
public function onClose(ConnectionInterface $conn) {}
public function onError(ConnectionInterface $conn, \Exception $e) {}
public function onBlogEntry($entry) {}
}
观看下面的幻灯片
客户端可以通过远程过程调用(RPC)与服务器通信
如果使用AutobahnJS(),则可以将其添加到客户端中
session.call('myaction', [mydata]).then(
function (res) {
console.log("Result:", res);
}
);
在Pusher类中,您必须使用下面的函数捕获从客户端发送的消息
public function onCall(ConnectionInterface $conn, $id, $topic, array $params)
{
// do what you want
}
想了很多,你能给我推荐一个javascript库,我可以用它来连接MessageComponentInterface。我知道我可以直接使用websocket类,但我需要一个更安全的js库。。