JavaScript websocket 实例

实例:
即时通讯聊天室demo
可以打开两个页面互相发送消息查看。

 

websocket.js

    /*  判断浏览器是否内置了websocket */if ('WebSocket' in window) {websocket = new WebSocket('ws://180.76.144.202:19910/websocket');}websocket->onerror = 'onerror';websocket->onopen = 'onopen';websocket->onmessage = 'onmessage';websocket->onclose = 'onclose';websocket->onbeforeunload = 'onbeforeunload';websocket->closeWebSocket = 'closeWebSocket';weboskcet->send = 'send';/* 连接失败时触发 */function onerror () {setMessageInnerHTML('websocket connection error');}/* 连接成功时触发 */function onopen () {setMessageInnerHTML('websocket connect success');}/* 收到新消息时触发 */function onmessage (event) {setMessageInnerHTML(event);}/* 连接关闭时触发 */function onclose () {setMessageInnerHTML('websocket connectionn closed');}/* 当窗口关闭时,主动关闭websocket连接。防止连接还没断开就关闭窗口,server端异常 */function onbeforeunload () {closeWebSocket();}/* 关闭websocket连接 */function closeWebSocket () {websocket.close();}/* 发送消息 */function send () {var message = document.getElementById('container').value;websocket.send(message);}

 instance.php:

<?phprequire_once "../../MeepoPS/index.php";$telnet = new \MeepoPS\Api\Websocket("0.0.0.0", 19910);$telnet->instanceName = "MeepoPS-Websocket";$telnet->callbackStartInstance = "callbackStartInstance";
$telnet->callbackConnect = "callbackConnect";
$telnet->callbackNewData = "callbackNewData";
$telnet->callbackSendBackBufferEmpty = "callbackSendBackBufferEmpty";
$telnet->callbackInstanceStop = "callbackInstanceStop";
$telnet->callbackConnectClose = "callbackConnectClose";function callbackStartInstance ($instance)
{echo "实例" . $instance->instanceName . "启动" . "\n";
}function callbackConnect ($connect)
{foreach ($connect->instance->clientList as $client) {if ($connect->id != $client->id) {$client->send("新用户" . $connect->id . "已经上线");}}var_dump("收到新链接. UniqueId = " . $connect->id . "\n");
}function callbackNewData ($connect, $data)
{//   $connect->send("用户 " . $connect->id . "说:" . $data . "\n");var_dump("UnqiueId = " . $connect->id . "说:" . $data ."\n");foreach ($connect->instance->clientList as $client) {if ($connect->id != $client->id) {$client->send("群发:用户" . $connect->id . "说: " . $data . "\n");}}}function callbackSendBufferEmpty ($connect)
{var_dump("用户 " . $connect->id . "的发送的消息队列为空\n");
}function callbackInstanceStop ($instance)
{foreach ($instance->clientList as $client) {$client->send("Service stop!");}
}\MeepoPS\runMeepoPS();

  

 

服务可以用MeepoPS/SWOOLE搭建:

 下面是MeepoPS实例

// 下载MeepoPS
git clone https://github.com/lixuancn/MeepoPS.git
// 进入目录
cd MeepoPS/Example/Chat_Robot

// 普通模式启动:
sudo php instance.php start
// 守护进程模式启动:
sudo php instance.php start -d

守护进程启动下:
ps -aux | grep php
能看到instance.php 说明启动成功了。



注意浏览器访问的端口和instance.php 端口一致。
例如 centos 7 防护墙查看端口19911 是否开启:


// 查看防火墙状态:
systemctl status firewalld.service

// 开启端口19911
firewalld-cmd --permanent --zone=public --add-port=19911/tcp

// 重启防火墙查看端口:

systemctl restart firewalld.service
firewall-cmd --query-port=19910/tcp

如果出现yes即为开启成功。



打开浏览器访问websocket.js,控制台查看log.



转载于:https://www.cnblogs.com/phpcurd/p/9216541.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397634.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQL Server 2008 基础

SQL Server 2008 基础SQL流程TDS是一种协议&#xff0c;一系列描述两个计算机间如何传输数据的规则。象别的协议一样&#xff0c;它定义了传输信息的类型和他们传输的顺序。总之&#xff0c;协议描述了“线上的位”&#xff0c;即数据如何流动。表格数据流协议是建立在TCP/IP N…

python异步处理请求_如何一次在python中发送异步http请求?

1)创建一个Queue.Queue对象2)根据您的喜好制作尽可能多的“工作”线程,从Queue.Queue读取3)将作业提供给Queue.Queue工作线程将按照它们放置的顺序读取Queue.Queue从文件中读取行并将它们放入Queue.Queue的示例import sysimport urllib2import urllibfrom Queue import Queueim…

如何通过Git GUI将自己本地的项目上传至Github

ithud是一个程序员以后成长都会使用到的&#xff0c;先不说很多优秀的开源框架都在这上面发布&#xff0c;光是用来管理自己的demo都已经让人感到很方便&#xff0c;用得也很顺畅。而真正让我下定决心使用github的原因是因为两次误操作&#xff0c;将自己所有的学习demo全都删除…

lucene解决全文检索word2003,word2007的办法

在上一篇文章中 &#xff0c;lucene只能全文检索word2003&#xff0c;无法检索2007&#xff0c;并且只能加载部分内容&#xff0c;无法加载全文内容。为解决此问题&#xff0c;找到了如下方法 POI 读取word (word 2003 和 word 2007) 最近在给客户做系统的时候&#xff0c;用户…

【JSP笔记】第三章 JSP内置对象【上】

2019独角兽企业重金招聘Python工程师标准>>> 1.内置对象简介&#xff1a;JSP内置对象是WEB容器创建的一组对象&#xff0c;不使用new关键就可以是用的对象。 <% out.println(123); %> 2.九大内置对象&#xff1a; outrequestresponsesessionapplication Page …

自定义标签 —— 实现时间转换和输出功能

第一步&#xff1a;导入jar包 jsp-api-2.2-sources.jar <!-- https://mvnrepository.com/artifact/javax.servlet.jsp/jsp-api --> <dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.…

laravel5 centos6.4下的配置体验

1. 安装lmnp环境: nginx version: nginx/1.6.0、 php 5.5.7 、 centos6.42. laravel-v5.1.4 一键安装包&#xff0c;在使用composer 安装时出现server 500的错误&#xff0c;改用了一键安装包注意&#xff1a;1. 防火墙的端口的&#xff0c; 2. laravel目录的用户权限&#xff…

java 并发编程多线程_多线程(一)java并发编程基础知识

线程的应用如何应用多线程在 Java 中&#xff0c;有多种方式来实现多线程。继承 Thread 类、实现 Runnable 接口、使用 ExecutorService、Callable、Future 实现带返回结果的多线程。继承 Thread 类创建线程Thread 类本质上是实现了 Runnable 接口的一个实例&#xff0c;代表一…

Docker监控方案(TIG)的研究与实践之Influxdb

2019独角兽企业重金招聘Python工程师标准>>> 前言&#xff1a; Influxdb也是有influxdata公司(www.influxdata.com )开发的用于数据存储的时间序列数据库.可用于数据的时间排列。在整个TIG(Telegrafinfluxdbgrafana)方案中&#xff0c;influxdb可算作一个中间件&…

iOS-生成随机数

有时候我们需要在程序中生成随机数&#xff0c;但是在Objective-c中并没有提供相应的函数&#xff0c;好在C中提供了rand()、srand()、random()、arc4random()几个函数。那么怎么使用呢&#xff1f;下面将简单介绍&#xff1a; 1、 获取一个随机整数范围在&#xff1a;[0,100)…

剑指offer 面试32题

面试32题&#xff1a; 题目&#xff1a;从上到下打印二叉树 题&#xff1a;不分行从上到下打印二叉树 解题代码&#xff1a; # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val x # self.left None # self.right …

crc算法java_c语言的crc16算法转java

一、c语言uint16_t crc_chk(uint8_t *data, uint8_t len){uint8_t i;uint16_t reg_crc 0xffff;while(len--) {reg_crc ^ *data;for(i 0; i < 8; i) {if(reg_crc & 0x01) {reg_crc (reg_crc >> 1) ^ 0xA001;} else {reg_crc reg_crc >> 1;}}}return reg_…

Java第三阶段学习(三、字符流、转换流)

一、字节流读取中文时出现的问题&#xff1a; 文件中有中文时&#xff0c;用字节流读取会出现乱码的问题&#xff0c;因为一个中文为两个字节。 二、字符编码表 编码表&#xff1a;其实就是生活中字符和计算机二进制的对应关系表。 1、ascii&#xff1a; 一个字节中的7位就可以…

windows下OpenSSL加密证书安装步骤与使用方法

OpenSSL加密证书一般用于签名认证&#xff0c;含私钥和公钥。在Linux系统中&#xff0c;OpenSSL一般是已经安装好了&#xff0c;可以直接使用。而在Windows系统中&#xff0c;是需要安装使用的。 最近在使用支付平台时&#xff0c;用到了OpenSSL&#xff0c;鉴于此分享给大家&a…

linux运维(五)

头有点大&#xff0c;也浪费了一些时间。明天过后缓冲一下1、存储过程与触发器的区别&#xff1f;答&#xff1a;&#xff08;1&#xff09;触发器主要是通过事件执行触发而被执行的&#xff0c;而存储过程可以通过存储过程名称而直接调用。&#xff08;call/execute&#xff0…

django web 自定义通用权限控制

需求&#xff1a;web系统有包含以下5个url&#xff0c;分别对于不同资源&#xff1b; 1、stu/add_stu/ 2、stu/upload_homework/ 3、stu/query_homework/ 4、stu/add_record/ ----------------------------------------------------------------------------------------------…

java源码影视源码搭建教程_新版千月影视app源码+搭建教程

使用notepad批量替换URL【http://】为你的域名(被替换的域名访问有成品不能发布 需要修改的到前台confing里面查询)&#xff0c;替换名称【鲸鹰影视】为你的应用名称&#xff1b;服务端&#xff1a;1.将替换好的后端源码打包上传至站点根目录后解压&#xff1b;2.配置网站伪静态…

git学习相关的博客地址

Git分支管理策略&#xff1a; http://www.ruanyifeng.com/blog/2012/07/git.html Git 使用规范流程&#xff1a; http://www.ruanyifeng.com/blog/2015/08/git-use-process.html 基于git的源代码管理模型——git flow&#xff1a; http://www.ituring.com.cn/article/56870 Git…

Django框架基础学习

Django安装python下载地址 http://www.python.org/download/releases/3.3.4/Django的下载地址&#xff1a;https://www.djangoproject.com/download/1&#xff09;安装&#xff08;进到解压目录&#xff09;python setup.py install2、配置环境变量&#xff08;PATH&#xff09…

Uboot USB模式(RK3288变砖头的解决办法)

RK3288启动后有三种模式&#xff0c;可以分别进行操作。 第一种是normal也就是正常的启动模式。这个模式无法刷固件。一般板子通电就是这个模式 第二种是loader模式。就是刷固件模式。这个模式可以刷各种image。按住recover按键再通电&#xff0c;通过uboot的检测进入这个模式 …