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.pswp.cn/news/397634.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/397634.shtml
英文地址,請注明出處:http://en.pswp.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的檢測進入這個模式 …