1.搭建server

  1.1搭建server.php

    1.搭建websocket服务器,首先建立 server.php 文件,

    

 <?php
$server = new swoole_websocket_server('0.0.0.0', 9502);// 创建swoole的websocket实例 其中 0.0.0.0 代表监听所有回路 包括127.0.0.1 和 192.168.*.* 和 外部IP, 端口是9502 //监听打开事件
$server->on('open', function ($server, $request){
var_dump($request->fd, $request->get, $request->server);
$server->push($request->fd, "我是open\n");
}); //监听消息事件
$server->on('message', function ($server, $message){
echo "Message: {$message->data}\n";
$server->push($message->fd, "服务器给的: {$message->data}");
}); //监听关闭事件
$server->on('close', function ($server, $fd){
echo "客户端: {$fd} 关闭了";
}); $server->start();

    $server->push("客户端ID", "推送信息"); 这个方法是server向client推送信息的方法;

    server 的 on 事件监听有 open : 连接成功事件

                message : 收到信息事件

                close : 客户端关闭事件

    2.运行server.php文件 php server.php
    

2.搭建client

  2.1 搭建client.html

    1.创建client.html,主要使用 js 的 WebSocket() 

    

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> </body>
<script>
var wsServer = 'ws://192.168.33.10:9502';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log("连接到服务器");
}; websocket.onclose = function (evt) {
console.log("连接关闭");
}; websocket.onmessage = function (evt) {
console.log('收到服务器信息' + evt.data);
}; websocket.onerror = function (evt, e) {
console.log('错误信息: ' + evt.data);
};
</script>
</html>

    2.参数说明: var wsServer = 'ws://192.168.33.10:9502'; 

          ws: 代表使用websocket协议

          ip地址 是server的地址

    3.监听事件 onopen : 客户端连接到服务器的时候触发

         onclose : 客户端关闭的时候触发

         onmessage : 收到服务器信息的时候触发

         onerror : 发生错误的时候触发,包括连接错误,发送、接收信息的时候出现错误触发

3.测试连接

  3.1客户端连接

  

  输出正常

  3.2服务器连接

  

  输出正常!

4.总结

  swoole的 websocket 服务器搭建成功,当客户端请求服务器的时候,客户端执行了onopen事件,触发了console.log,服务器端当client连接的时候,触发了onopen,打印了fd,和客户端请求头信息;

这样就搭建成功了server和client实时双工通信! 可以做一个实时聊天室,或者弹幕系统,以后慢慢学习!

swoole学习(二)----搭建server和client的更多相关文章

  1. Swoole学习(二)Swoole之TCP服务器的创建

    环境:Centos6.4,PHP环境:PHP7 <?php //创建TCP服务器 /** * $host 是swoole需要监听的ip,如果要监听本地,不对外服务,那么就是127.0.0.1;如 ...

  2. swoole 异步非堵塞 server/端 client/端 代码,已经测试完毕。贴代码

    服务器环境  centos7.0  swoole4.3 php7.2 pcre4.8  nginx1.8   php-fpm server.php <?php class Server { pr ...

  3. swoole深入学习 2. tcp Server和tcp Client

    这节来学习Swoole最基础的Server和Client.会通过创建一个tcp Server来讲解. server <?php class Server { private $serv; pub ...

  4. swoole深入学习 3. upd Server和udp Client

    前面主要讲了tcp得server和client的业务处理,tcp有三次握手,有连接的概览,而UDP服务器与TCP服务器不同,UDP没有连接的概念.启动Server后,客户端无需Connect,直接可以 ...

  5. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  6. 保姆级教程——Ubuntu16.04 Server下深度学习环境搭建:安装CUDA8.0,cuDNN6.0,Bazel0.5.4,源码编译安装TensorFlow1.4.0(GPU版)

    写在前面 本文叙述了在Ubuntu16.04 Server下安装CUDA8.0,cuDNN6.0以及源码编译安装TensorFlow1.4.0(GPU版)的亲身经历,包括遇到的问题及解决办法,也有一些 ...

  7. AspectJ基础学习之二搭建环境(转载)

    AspectJ基础学习之二搭建环境(转载) 一.下载Aspectj以及AJDT 上一章已经列出了他的官方网站,自己上去download吧.AJDT是一个eclipse插件,开发aspectj必装,他可 ...

  8. Netty4.0学习笔记系列之一:Server与Client的通讯

    http://blog.csdn.net/u013252773/article/details/21046697 本文是学习Netty的第一篇文章,主要对Netty的Server和Client间的通讯 ...

  9. Spring+SpringMVC+MyBatis深入学习及搭建(十二)——SpringMVC入门程序(一)

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6999743.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十一)——S ...

随机推荐

  1. SQL 截取字符

    select SUBSTRING('123,abcdefg',charindex(',','123,abcdefg',0)+1,LEN('123,abcdefg')-charindex(',','12 ...

  2. 关于map容器的元素被无参初始化

    使用C++中的map容器定义一个mp,当你执行if语句判断mp[3]是否为1时,那么如果mp[3]以前不存在,此时mp[3]就会被无参初始化,second赋值为0. 以下的程序可以证明这一点.执行了第 ...

  3. Oracle案例06—— OGG-01098 Could not flush "./dirdat/e1000004383" (error 28, No space left on device)

    一.前言 自从换了新环境,各种问题层出不穷,如果不是之前积累的经验丰富,估计都歇菜了,看来作为数据库全栈工程师(oracle/mysql/sqlserver/sap hana/pg/mongodb/r ...

  4. 设计模式:享元(FlyWeight)模式

    设计模式:享元(FlyWeight)模式 一.前言     享元(FlyWeight)模式顾名思义,既是轻量级的,原因就是享元,共享元素,这里的元素指的是对象.如何共享对象,那就是在检测对象产生的时候 ...

  5. Hyperledger Fabric 1.0 学习搭建 (一)--- 基础环境搭建

    1: 环境构建在本文中用到的宿主机环境是Centos ,版本为Centos.x86_64 7.2, 一定要用7版本以上, 要不然会安装出错. 通过Docker 容器来运行Fabric的节点,版本为v1 ...

  6. canvas游戏和动画中的碰撞检测(2种简单方式)

    碰撞检测关键步骤 碰撞检测需要处理经历下面两个关键的步骤: 计算判断两个物体是否发生碰撞 发生碰撞后,两个物体的状态和动画效果的处理 计算碰撞 只要两个物体相互接触,它们就会发生碰撞. 矩形物体碰撞检 ...

  7. np.arrange用法

    np.arange()经常用,其用法总结如下: np.arange(0,60,2) 生成从0到60的步距为2的数组,其中0为初始值,60为终值,2步距, np.arange(60) 生成从0到59的默 ...

  8. Code First TPH、TPT、TPC与继承类

    一.Table Per Hierarchy (TPH,默认) 每个层次结构共用一个表,类的每一个属性都必须是可空的. 1.默认行为 只建立一个表,把基类和子类中的所有属性都映射为表中的列. 在这种处理 ...

  9. SAP Fiori + Vue = ?

    2017年3月28日,我到国内一个SAP CRM客户那里,同他们的架构师关于二次开发的UI框架选择SAP UI5还是Vue进行了一番探讨.回到SAP研究院之后,我把这个问题扔到了公司的微信群里,引起了 ...

  10. tftp传输可执行程序问题

    昨天搭建了板子从nfs系统启动,这样只要在开发机上编写程序编译,就可以在板子上测试运行了,编写了hello world 程序,用arm编译器编译,在主板上运行,提示出错:什么exception ((什 ...