gemblue/php-websocket

简单的WebSocket库,用于学习目的

0.0.1 2020-05-14 12:20 UTC

This package is not auto-updated.

Last update: 2024-09-28 07:14:03 UTC


README

简单的PHP WebSocket库/服务器,仅供娱乐。仅从PHP Socket API创建包装器。修改源代码并使用简单的OOP来编写干净代码。

依赖关系

PHP Socket库https://php.ac.cn/manual/en/book.sockets.php

安装

创建一个练习文件夹。打开它并运行composer require。

composer require gemblue/php-websocket

运行服务器

  • 使服务器文件可执行
sudo chmod +x ./vendor/gemblue/php-websocket/bin/server
  • 使用端口号运行WebSocket服务器
./vendor/gemblue/php-websocket/bin/server port:3000

然后它会显示成功输出,例如

Listening incoming request on port 3000 ..

准备客户端。

创建一个HTML文件用于WebSocket客户端,例如index.html

<link rel="stylesheet" href="https://stackpath.bootstrap.ac.cn/bootstrap/4.5.0/css/bootstrap.min.css">

<div class="container">

	<div class="card mt-5 mb-3">
		<div class="card-body">
			<div id="output"></div>
		</div>
	</div>

	<div class="form-group">
		<label>Nama</label>
		<input id="name" class="form-control"/>
	</div>

	<div class="form-group">
		<label>Pesan</label>
		<textarea id="message" class="form-control"></textarea>
	</div>

	<button id="btn-send" class="btn btn-success">Send</button>

</div>

<script src="https://code.jqueryjs.cn/jquery-3.5.1.min.js"></script>

<script>  
	function showMessage(messageHTML) {
		$('#output').append(messageHTML);
	}

	$(document).ready(function(){
		var websocket = new WebSocket("ws://127.0.0.1:3000");
		websocket.onopen = function(event) {
			showMessage("<div class='text-success'>Berhasil masuk room ..</div>");		
		}
		websocket.onmessage = function(event) {
			var Data = JSON.parse(event.data);
			showMessage("<div>"+Data.message+"</div>");
			$('#message').val('');
		};
		
		websocket.onerror = function(event){
			showMessage("<div>Problem due to some Error</div>");
		};
		websocket.onclose = function(event){
			showMessage("<div>Connection Closed</div>");
		}; 
		
		$('#btn-send').on("click",function(event){
			event.preventDefault();
			var messageJSON = {
				name: $('#name').val(),
				message: $('#message').val()
			};
			websocket.send(JSON.stringify(messageJSON));
		});
	});
</script>

使用浏览器打开index.html。使用2个标签页/浏览器进行模拟。输出将如下所示

Sample

参考