PHP WekSocket

要在PHP中实现WebSocket,可以使用开源库,如RatchetSwoole。这些库提供了WebSocket服务器的实现WebSocket连接、消息发送和接收。

本章介绍使用 Ratchet 库来实现Websocket

1.安装 Ratchet

安装开始前,请确保在你的项目根目录下的composer.json文件包含以下内容,若无composer.json文件或不存在以下内容,请手动创建文件或添加内容

{  
    "require": {  
        "cboden/ratchet": "^0.4"     // 此处表示约束版本为 0.4
    }  
}

然后运行以下命令来安装Ratchet

composer install

2.编写服务脚本文件

<?php  
require 'vendor/autoload.php'; // 引入Composer自动加载文件  
  
use Ratchet\MessageComponentInterface;  
use Ratchet\ConnectionInterface;  
use Ratchet\Server\IoServer;  
use Ratchet\Http\HttpServer;  
use Ratchet\WebSocket\WsServer;  
  
class MyWebSocketServer implements MessageComponentInterface {  
    protected $clients;  
  
    public function __construct() {  
        $this->clients = new \SplObjectStorage;  
    }  
  
    public function onOpen(ConnectionInterface $conn) {  
        // 当有新的连接时触发  
        $this->clients->attach($conn);  
        echo "New connection! ({$conn->resourceId})\n";  
    }  
  
    public function onMessage(ConnectionInterface $from, $msg) {  
        // 当收到消息时触发  
        echo "Received message: {$msg}\n";  
  
        // 向所有连接的客户端发送消息  
        foreach ($this->clients as $client) {  
            $client->send($msg);  
        }  
    }  
  
    public function onClose(ConnectionInterface $conn) {  
        // 当连接关闭时触发  
        $this->clients->detach($conn);  
        echo "Connection {$conn->resourceId} has disconnected\n";  
    }  
  
    public function onError(ConnectionInterface $conn, \Exception $e) {  
        // 当发生错误时触发  
        echo "An error has occurred: {$e->getMessage()}\n";  
        $conn->close();  
    }  
}  
  
$server = IoServer::factory(  
    new HttpServer(  
        new WsServer(  
            new MyWebSocketServer()  
        )  
    ),  
    8080 // 设置WebSocket服务器监听的端口号  
);  
  
$server->run();
php websocket_server.php

执行以上命令,开始创建一个WebSocket服务器,监听8080端口。

3.前端连接websocket服务

var connection = new WebSocket('ws://localhost:8080');  
  
connection.onopen = function () {  
    console.log('Connected to the server!');  
    connection.send('你好呀!');  
};  
  
connection.onmessage = function (event) {  
    console.log('服务器说', event.data);  
};  
  
connection.onclose = function () {  
    console.log('断开啦,再见');  
};

下一章将会讲PHP Swoole 如何使用Websocket

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值