一、workerman安裝,測試環境為linux

1、在網站根目錄,用命令行安裝,要是出現root權限提示,輸入y回車就行,或者新建一個用户再進入安裝

Linux系統可以使用以下腳本測試本機PHP環境是否滿足WorkerMan運行要求。
curl -Ss https://www.workerman.net/check | php

上面腳本如果全部顯示ok,則代表滿足WorkerMan要求

安裝命令:

設置鏡像
由於國內訪問composer比較慢,建議設置阿里雲composer鏡像,運行如下命令設置阿里雲代理

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

安裝workerman
在根目錄中運行
composer require workerman/workerman

postman調用java wsdl_postman調用java wsdl

 

 2、安裝後的效果圖如下,或者直接下載官方代碼包複製進來

postman調用java wsdl_postman調用java wsdl_02

 

 

postman調用java wsdl_composer_03

 

 3、開啓服務器2345端口,測試服務器為騰訊雲,在騰訊雲控制平台開啓就行

4、在根目錄建一個start.php的文件,內容如下所示:

<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';

$global_uid = 0;
// 當客户端連上來時分配uid,並保存連接,並通知所有客户端
function handle_connection($connection)
{
    global $text_worker, $global_uid;
    // 為這個連接分配一個uid
    $connection->uid = ++$global_uid;
    
}

// 當客户端發送消息過來時,轉發給所有人
function handle_message(TcpConnection $connection, $data)
{
    global $text_worker;
   foreach($text_worker->connections as $conn)
    {

        // $conn->send("user[{$connection->uid}]"."進來了");
         $conn->send($data);
    }
}

// 當客户端斷開時,廣播給所有客户端
function handle_close($connection)
{
    global $text_worker;
    foreach($text_worker->connections as $conn)
    {

        $conn->send("user[{$connection->uid}] logout");
    }
}

// 創建一個Worker監聽2347接口
$text_worker = new Worker("websocket://0.0.0.0:2345");

// 只啓動1個進程,這樣方便客户端之間傳輸數據
$text_worker->count = 1;

$text_worker->onConnect = 'handle_connection';
$text_worker->onMessage = 'handle_message';
$text_worker->onClose = 'handle_close';

Worker::runAll();

5、在根目錄用命令進行啓動,我在寶塔上啓動的,加了-d 可以關閉啓動窗口後進程不死

啓動命令:php start.php start -d

停止命令:php start.php stop

重啓命令:php start.php restart

postman調用java wsdl_composer_04

 

 6、再建一個靜態html頁面進行測試,ws地址要換成你的ip或者網站都行,我的是ws://d.aaa.net:2345內容如下:

<!doctype html>
<html>

	<head>
		<meta charset="utf-8">
		<title>websocket測試</title>
		<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
	</head>

	<body>
<input type="text" id="roomid" value="無名">房間號
<br/>
<input type="text" id="firstname" value="你好"><button onclick="testsend()">發送</button><button onclick="closeaa()">關閉</button>
<br>
<div id="content"></div>
		<script type="text/javascript">
			ws = new WebSocket("ws://d.aaa.net:2345");
			ws.onopen = function() {
			    alert("連接成功");
			};
			ws.onmessage = function(e) {
			    //alert("收到服務端的消息:" + e.data);
				var re = JSON.parse(e.data);
				//document.getElementById('content').innerHTML +=re+"<br/>";
				document.getElementById('content').innerHTML +=re.roomid+"説:"+re.content+"<br/>";
			};
			
			function testsend(){
				var roomid = document.getElementById('roomid').value;
				var word = document.getElementById('firstname').value;
				var re={"roomid":roomid,"content":word}
				//var re = roomid+'.'+word;
				ws.send(JSON.stringify(re));
			}
			function closeaa(){
				if(ws){
				ws.close();
				 alert("已經關閉");
				}
				return false;
			}
		</script>
	</body>

</html>

 7、到這裏就結束了,可以把這個html頁面上傳到服務器上發給別人進行測試一下,我這裏效果如下

postman調用java wsdl_composer_05

 

 

要是做點對點聊天,建議用GatewayWorker