Использую в проекте на стороне сервера ws wamp от Ratchet.
class WAMPServer implements WampServerInterface, MessageComponentInterface
{
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
function onOpen(ConnectionInterface $conn)
{
// Store the new connection to send messages to later
$this->clients->attach($conn);
echo "New connection! ({$conn->resourceId})\n";
}
function onClose(ConnectionInterface $conn)
{
// The connection is closed, remove it, as we can no longer send it messages
$this->clients->detach($conn);
echo "Connection {$conn->resourceId} has disconnected\n";
}
function onError(ConnectionInterface $conn, \Exception $e)
{
echo "An error has occurred: {$e->getMessage()}\n";
$conn->close();
}
function onCall(ConnectionInterface $conn, $id, $topic, array $params)
{
$conn->callError($id, $topic, 'RPC not supported on this demo');
}
function onSubscribe(ConnectionInterface $conn, $topic)
{
$numRecv = count($this->clients) - 1;
echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n"
, $conn->resourceId, $topic, $numRecv, $numRecv == 1 ? '' : 's');
foreach ($this->clients as $client) {
if ($conn !== $client) {
// The sender is not the receiver, send to each client connected
$client->send($topic);
}
}
}
function onUnSubscribe(ConnectionInterface $conn, $topic)
{
// TODO: Implement onUnSubscribe() method.
}
function onPublish(ConnectionInterface $conn, $topic, $event, array $exclude, array $eligible)
{
$topic->broadcast($event);
}
function onMessage(ConnectionInterface $from, $msg)
{
$numRecv = count($this->clients) - 1;
echo sprintf('Connection %d sending message "%s" to %d other connection%s' . "\n"
, $from->resourceId, $msg, $numRecv, $numRecv == 1 ? '' : 's');
foreach ($this->clients as $client) {
if ($from !== $client) {
// The sender is not the receiver, send to each client connected
$client->send($msg);
}
}
}
}
Стартовый скрипт:
$server = IoServer::factory(
new HttpServer(
new WsServer(
new \app\sockets\WAMPServer()
)
),
8080
);
$server->run();
Со стороны клиента используется старая версия autobahn js (0.8.2) для поддержки работы с wamp v1 (коим является ratchet):
//Это работает, соединение устанавливается
//var ws = new WebSocket('ws://127.0.0.2:8080');
//в этом случае коннект не устанавливается
ab.connect(
'ws://127.0.0.2:8080',
function (session) {
session.subscribe('comments', onNewComment);
},
function onClose() {
alert('Пропало соединение с сервером');
},
{
'maxRetries': 100,
'retryDelay': 5000
}
);
При использовании autobahn вылетает следующая ошибка:
WebSocket connection to 'ws://127.0.0.2:8080/' failed: Error during WebSocket handshake: Unexpected response code: 426
Кто сталкивался с таким? С чем это может быть связано?
p.s. Какие есть еще варианты кроме ratchet (с документацией) использования wamp ws на стороне сервера?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как с помощью библиотеки simple_html_domphp получить содержимое атрибута?
Отправка формы трех полей в базу данных: post_name, slug, post_content, но что-то не пойму, как осуществляется отправка данныхПочитал, как в wordpress отправляются...
Использую глобальный хук WM_KEYBOARD_LL, для отлова сообщений о нажатых клавишахКак при нажатии определённой клавиши отменить её действие, а лучше,...