swoole-websocket

websocket

  1. 打开官网,我们看到在这里插入图片描述
    需要注意的是,其中的回调函数open与close不是填的,但是message这个回调方法是必须实现的,我们拿到上面的代码,直接复制,在/study 目录下新建一个websocket.php 文件

  2. 我们继续在/study 目录下新建一个websocket.html文件,开始撰写相关的前端代码
    在这里插入图片描述
    在上面的demo中,相关的js代码可以在websocket的资料中可以搜索的到,作用跟上面的备注相关联,这里需要注意的是 在js连接websocket中 url的前缀必须为ws:// 不能为http或https

  3. 在这里需要补充一点,websocket是基于tcp的,在这里的区别,可以看相关资料:https://www.cnblogs.com/jiangzhaowei/p/8781635.html 这里有更详细的讲解,由于websocket是基于tcp我们需要需要打开之前撰写的http_server.php 在Linux命令行中运行它 php http_server.php 然后再执行刚刚撰写的websocket.php
    在这里插入图片描述
    在这里插入图片描述
    然后我们打开域名,端口号为刚刚撰写的websocket中的端口,笔者这里的端口为9501,我们需要打开的网站为http_server.php的端口:url:8811/websocket.html,需要一提的是,如果购买的是云服务器,不是本地的虚拟机,请开放安全组!
    在这里插入图片描述
    4.由于websocket是基于tcp的连接,我们也可以在这里设置一个set方法调用,这样的好处是可以不在去启动Http_server这个文件,单独跑websocket这个文件即可,我们只需要调用多一个set方法即可
    在这里插入图片描述

  4. 优化websocket代码
    如大家所看到的,上面的代码都是一些面向过程的代码,如果实际业务当中,业务简单的还好,如果是业务复杂的代码,这种面向过程的代码会非常头疼,我们对代码进行一下封装,对代码做一些简单的优化

<?php 


/**
 *websocket基础类 	
 */
class WebSocket {
	
	//shot 仅允许本机运行为127.0.0.1 允许指定ip 则47.123.124.1 允许所有ip则为0.0.0.0
	private static $host = '0.0.0.0';

	//端口号
	private static $port = 9501;	

	//websocket初始化对象	
    public  $socket = null;

	function __construct()
	{	
		//websocket类		
		$this->socket = new  Swoole\WebSocket\Server(self::$host, self::$port);

		//静态文件访问	
		$this->socket->set([
				'enable_static_handler' => true, //开启静态资源
				'document_root' => '/study' //静态资源目录
		]);

		//建立建立执行	
		$this->socket->on('open',[$this,'onopen']);

		//接收客户端发送消息	
		$this->socket->on('message',[$this,'onmessage']);

		//关闭连接时执行此函数
		$this->socket->on('close',[$this,'onclose']);

		//启动服务
		$this->socket->start();

	}


	/**
	 *客户端与服务器建立连接并完成握手后会回调此函数 	
	 */	
	public 	 function onopen($server,$request){
			var_dump("server-success:{$request->fd}\n");
	}

	/**
	 *当服务器收到来自客户端的数据帧时会回调此函数。
	 */
	public   function onmessage($server,$frame){
		echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n";
		$server->push($frame->fd,'date:'.date('Y-m-d H:i:s',time()));

	}

	/**
	 *当服务器连接关闭时回调此函数
	 */
	public   function onclose($server,$fd){
			var_dump("client: $fd end \n");

	}	

}

$obj = new WebSocket();
	

上面就是我们优化之后的代码,直接运行该文件,一个简单的websocket就连接了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值