欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
PHPSocket.io
userphoto

2023.05.14 江蘇

關(guān)注

PHPSocket.IO,PHP跨平臺實(shí)時(shí)通訊框架

PHPSocket.IO是PHP版本的Socket.IO服務(wù)端實(shí)現,基于workerman開(kāi)發(fā),用于替換node.js版本Socket.IO服務(wù)端。PHPSocket.IO底層采用websocket協(xié)議通訊,如果客戶(hù)端不支持websocket協(xié)議, 則會(huì )自動(dòng)采用http長(cháng)輪詢(xún)的方式通訊。PHPSocket.IO實(shí)現的Polling通信機制包括Adobe Flash Socket、AJAX長(cháng)輪詢(xún)、JSONP輪詢(xún)等。具體采用哪種機制通訊對于開(kāi)發(fā)者完全透明, 開(kāi)發(fā)者使用的是統一的接口。

PHPSocket.IO設計的目標是利用PHP構建能夠在不同瀏覽器和移動(dòng)設備上良好運行的實(shí)時(shí)應用,如實(shí)時(shí)分析系統、在線(xiàn)聊天室、在線(xiàn)客服系統、評論系統、WebIM等。 PHPSocket.IO與workerman的區別是,PHPSocket.IO基于workerman開(kāi)發(fā),workerman有的特性PHPSocket.IO都支持。 PHPSocket.IO最大的優(yōu)勢是對各種瀏覽器的兼容性更好。

源碼地址


https://github.com/walkor/phpsocket.io

在線(xiàn)示例

聊天室 示例源碼

phpsocket.io手冊

安裝

請使用composer集成phpsocket.io。

composer require workerman/phpsocket.io

腳本中引用vendor中的autoload.php實(shí)現SocketIO相關(guān)類(lèi)的加載。例如

require_once '/你的vendor路徑/autoload.php';

服務(wù)端和客戶(hù)端連接

創(chuàng )建一個(gè)SocketIO服務(wù)端

<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use PHPSocketIO\SocketIO; // 創(chuàng )建socket.io服務(wù)端,監聽(tīng)3120端口 $io = new SocketIO(3120); // 當有客戶(hù)端連接時(shí)打印一行文字 $io->on('connection', function($socket)use($io){ echo 'new connection coming\n'; }); Worker::runAll();

客戶(hù)端

<script src='https://cdn.bootcss.com/socket.io/2.0.3/socket.io.js'></script>
<script>
// 如果服務(wù)端不在本機,請把127.0.0.1改成服務(wù)端ip
var socket = io('http://127.0.0.1:3120');
// 當連接服務(wù)端成功時(shí)觸發(fā)connect默認事件
socket.on('connect', function(){
    console.log('connect success');
});
</script>

自定義事件

socket.io主要是通過(guò)事件來(lái)進(jìn)行通訊交互的。

socket連接除了自帶的connect,message,disconnect三個(gè)事件以外,在服務(wù)端和客戶(hù)端開(kāi)發(fā)者可以自定義其它事件。

服務(wù)端和客戶(hù)端都通過(guò)emit方法觸發(fā)對端的事件。

例如下面的代碼在服務(wù)端定義了一個(gè)chat message事件,事件參數為$msg。

<?php require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use PHPSocketIO\SocketIO; $io = new SocketIO(3120); // 當有客戶(hù)端連接時(shí) $io->on('connection', function($socket)use($io){ // 定義chat message事件回調函數 $socket->on('chat message', function($msg)use($io){ // 觸發(fā)所有客戶(hù)端定義的chat message from server事件 $io->emit('chat message from server', $msg); }); }); Worker::runAll();

客戶(hù)端通過(guò)下面的方法觸發(fā)服務(wù)端的chat message事件。

<script src='//cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
// 連接服務(wù)端
var socket = io('http://127.0.0.1:3120');
// 觸發(fā)服務(wù)端的chat message事件
socket.emit('chat message', '這個(gè)是消息內容...');
// 服務(wù)端通過(guò)emit('chat message from server', $msg)觸發(fā)客戶(hù)端的chat message from server事件
socket.on('chat message from server', function(msg){
    console.log('get message:' + msg + ' from server');
});
</script>

workerStart事件

phpsocket.io提供了workerStart事件回調,也就是當進(jìn)程啟動(dòng)后準備好接受客戶(hù)端鏈接時(shí)觸發(fā)的回調。
一個(gè)進(jìn)程生命周期只會(huì )觸發(fā)一次??梢栽谶@里設置一些全局的事情,比如開(kāi)一個(gè)新的Worker端口等等。

require_once __DIR__ . '/vendor/autoload.php'; use Workerman\Worker; use PHPSocketIO\SocketIO; $io = new SocketIO(9120); // 監聽(tīng)一個(gè)http端口,通過(guò)http協(xié)議訪(fǎng)問(wèn)這個(gè)端口可以向所有客戶(hù)端推送數據(url類(lèi)似http://ip:9191?msg=xxxx) $io->on('workerStart', function()use($io) { $inner_http_worker = new Worker('http://0.0.0.0:9191'); $inner_http_worker->onMessage = function($http_connection, $data)use($io){ if(!isset($_GET['msg'])) { return $http_connection->send('fail, $_GET['msg'] not found'); } $io->emit('chat message', $_GET['msg']); $http_connection->send('ok'); }; $inner_http_worker->listen(); }); // 當有客戶(hù)端連接時(shí) $io->on('connection', function($socket)use($io){ // 定義chat message事件回調函數 $socket->on('chat message', function($msg)use($io){ // 觸發(fā)所有客戶(hù)端定義的chat message from server事件 $io->emit('chat message from server', $msg); }); }); Worker::runAll();

phpsocket.io啟動(dòng)后開(kāi)內部http端口通過(guò)phpsocket.io向客戶(hù)端推送數據參考 web-msg-sender。

分組

socket.io提供分組功能,允許向某個(gè)分組發(fā)送事件,例如向某個(gè)房間廣播數據。

1、加入分組(一個(gè)連接可以加入多個(gè)分組)

$socket->join('group name');

2、離開(kāi)分組(連接斷開(kāi)時(shí)會(huì )自動(dòng)從分組中離開(kāi))

$socket->leave('group name');

向客戶(hù)端發(fā)送事件的各種方法

$io是SocketIO對象。$socket是客戶(hù)端連接

$data可以是數字和字符串,也可以是數組。當$data是數組時(shí),客戶(hù)端會(huì )自動(dòng)轉換為javascript對象。

同理如果客戶(hù)端向服務(wù)端emit某個(gè)事件傳遞的是一個(gè)javascript對象,在服務(wù)端接收時(shí)會(huì )自動(dòng)轉換為php數組。

1、向當前客戶(hù)端發(fā)送事件

$socket->emit('event name', $data);

2、向所有客戶(hù)端發(fā)送事件

$io->emit('event name', $data);

3、向所有客戶(hù)端發(fā)送事件,但不包括當前連接。

$socket->broadcast->emit('event name', $data);

4、向某個(gè)分組的所有客戶(hù)端發(fā)送事件

$io->to('group name')->emit('event name', $data);

獲取客戶(hù)端ip

$io->on('connection', function($socket)use($io){
        var_dump($socket->conn->remoteAddress);
});

關(guān)閉鏈接

$socket->disconnect();

限制連接域名

當我們想指定特定域名的頁(yè)面才能連接,可以用$io->origins方法來(lái)設置域名白名單。

$io = new SocketIO(2020);
$io->origins('http://example.com:8080');

多個(gè)域名時(shí)用空格分隔,類(lèi)似

$io = new SocketIO(2020); $io->origins('http://workerman.net http://www.workerman.net');

心跳

自帶心跳,無(wú)需手動(dòng)設置

支持SSL(https wss)

SSL支持有兩種方法,workerman原生和nginx代理

workerman原生支持

SSL 要求workerman>=3.3.7 phpsocket.io>=1.1.1

<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use PHPSocketIO\SocketIO;

// 傳入ssl選項,包含證書(shū)的路徑
$context = array(
    'ssl' => array(
        'local_cert'  => '/your/path/of/server.pem',
        'local_pk'    => '/your/path/of/server.key',
        'verify_peer' => false,
    )
);
$io = new SocketIO(2120, $context);

$io->on('connection', function($socket)use($io){
  echo 'new connection coming\n';
});

Worker::runAll();

注意:
1、證書(shū)是要驗證域名的,所以客戶(hù)端鏈接時(shí)要指定域名才能順利的建立鏈接。<br>
2、客戶(hù)端連接時(shí)不能再用http方式,要改成https類(lèi)似下面這樣。

<script> var socket = io('https://yoursite.com:2120'); //..... </script>

nginx代理SSL

前提條件及準備工作:

1、已經(jīng)安裝nginx,版本不低于1.3

2、假設phpsocket.io監聽(tīng)的是2120端口

3、已經(jīng)申請了證書(shū)(pem/crt文件及key文件)放在了/etc/nginx/conf.d/ssl下

4、打算利用nginx開(kāi)啟443端口對外提供ssl代理服務(wù)(端口可以根據需要修改)

nginx配置類(lèi)似如下:

server {
  listen 443;

  ssl on;
  ssl_certificate /etc/ssl/server.pem;
  ssl_certificate_key /etc/ssl/server.key;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  location /socket.io
  {
    proxy_pass http://127.0.0.1:2120;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'Upgrade';
    proxy_set_header X-Real-IP $remote_addr;
  }

  # location / {} 站點(diǎn)的其它配置...
}

注意:
1、證書(shū)是要驗證域名的,所以客戶(hù)端鏈接時(shí)要指定域名才能順利的建立鏈接。<br>
2、客戶(hù)端連接時(shí)不能再用http方式,要改成https類(lèi)似下面這樣。

<script> var socket = io('https://yoursite.com'); //..... </scrip
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
PHPSocket.IO知識學(xué)習整理
通過(guò)Socket.IO與nodeJs實(shí)現即時(shí)消息推送
WEB即時(shí)通訊/消息推送
workerman簡(jiǎn)單例子
Netty-SocketIO:最好用的Java版即時(shí)消息推送
搭建即時(shí)通訊服務(wù)器WebSocket,挺容易嘛
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久