workerman下载地址 http://www.workerman.net/

html

<!DOCTYPE html>
<html>
<head>
<title>HTML5</title>
<meta charset="utf-8" />
<script src="/public/admin/js/jquery.min.js"></script>
<script>
$(function() {
var socket;
var readyState = ["connecting", "connected", "closing", "closed"];
/* 打开连接事件 */
$("button:eq(0)").click(function() {
try {
/* 连接 */
socket = new WebSocket("ws://192.168.56.1:2345"); /* 绑定事件 */
socket.onopen = function() {
$("#msg").html("连接成功...");
}; socket.onmessage = function(e) {
$("#msg").html($("#msg").html() + "<br />" + e.data);
}; socket.onclose = function() {
$("#msg").html($("#msg").html() + "<br />关闭连接...");
};
} catch(exception) {
$("#msg").html($("#msg").html() + "<br />有错误发生");
}
}); /* 发送数据事件 */
$("button:eq(1)").click(function() {
/* 检查文本框是否为空 */
if($("#data").val() == "") {
alert("请输入数据!");
return;
} try {
socket.send($("#data").val());
$("#msg").html($("#msg").html() + "<br />发送数据:" + $("#data").val());
} catch (exception) {
$("#msg").html($("#msg").html() + "<br />发送数据出错");
} /* 清空文本框 */
$("#data").val("");
}); /* 断开连接 */
$("button:eq(2)").click(function() {
socket.close();
});
});
</script>
</head> <body>
<h1>WebSocket示例</h1>
<input type="text" id="data" />
<button>打开连接</button>
<button>发送数据</button>
<button>关闭连接</button>
<p id="msg"></p>
</body>
</html>

  php

<?php
use Workerman\Worker;
require_once '../Workerman/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯
$ws_worker = new Worker("websocket://0.0.0.0:2345"); //启动4个进程对外提供服务
$ws_worker->count = 4; $ws_worker->onWorkerStart = function($worker)
{
echo "Worker starting...\n";
}; //当接收到客户端发来的数据后显示数据并回发到客户端
$ws_worker->onMessage = function($connection, $data) {
global $ws_worker;
//显示数据
echo "you just received: $data\n"; //向客户端回发数据
if(!isset($connection->uid))
{
// 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证)
$connection->uid = $data;
/* 保存uid到connection的映射,这样可以方便的通过uid查找connection,
* 实现针对特定uid推送数据
*/
$ws_worker->uidConnections[$connection->uid] = $connection;
return $connection->send('login success, your uid is ' . $connection->uid);
}
// uid 为 all 时是全局广播
list($recv_uid, $message) = explode(':', $data);
// 全局广播
if($recv_uid == 'all')
{
broadcast($message);
}
// 给特定uid发送
else
{
sendMessageByUid($recv_uid, $message);
}
}; // 向所有验证的用户推送数据
function broadcast($message)
{
global $ws_worker;
foreach($ws_worker->uidConnections as $connection)
{
echo '1/';
$connection->send($message);
}
} // 针对uid推送数据
function sendMessageByUid($uid, $message)
{
global $ws_worker;
if(isset($ws_worker->uidConnections[$uid]))
{
$connection = $ws_worker->uidConnections[$uid];
$connection->send($message);
}
} // 运行worker
Worker::runAll();
?>

  可以单独给某个用户发信息,又可以给全部人发信息

workerman简单例子的更多相关文章

  1. Hibernate4.2.4入门(一)——环境搭建和简单例子

    一.前言 发下牢骚,这段时间要做项目,又要学框架,搞得都没时间写笔记,但是觉得这知识学过还是要记录下.进入主题了 1.1.Hibernate简介 什么是Hibernate?Hibernate有什么用? ...

  2. AgileEAS.NET SOA 中间件平台.Net Socket通信框架-简单例子-实现简单的服务端客户端消息应答

    一.AgileEAS.NET SOA中间件Socket/Tcp框架介绍 在文章AgileEAS.NET SOA 中间件平台Socket/Tcp通信框架介绍一文之中我们对AgileEAS.NET SOA ...

  3. spring mvc(注解)上传文件的简单例子

    spring mvc(注解)上传文件的简单例子,这有几个需要注意的地方1.form的enctype=”multipart/form-data” 这个是上传文件必须的2.applicationConte ...

  4. ko 简单例子

    Knockout是在下面三个核心功能是建立起来的: 监控属性(Observables)和依赖跟踪(Dependency tracking) 声明式绑定(Declarative bindings) 模板 ...

  5. mysql定时任务简单例子

    mysql定时任务简单例子 ? 1 2 3 4 5 6 7 8 9     如果要每30秒执行以下语句:   [sql] update userinfo set endtime = now() WHE ...

  6. java socket编程开发简单例子 与 nio非阻塞通道

    基本socket编程 1.以下只是简单例子,没有用多线程处理,只能一发一收(由于scan.nextLine()线程会进入等待状态),使用时可以根据具体项目功能进行优化处理 2.以下代码使用了1.8新特 ...

  7. 一个简单例子:贫血模型or领域模型

    转:一个简单例子:贫血模型or领域模型 贫血模型 我们首先用贫血模型来实现.所谓贫血模型就是模型对象之间存在完整的关联(可能存在多余的关联),但是对象除了get和set方外外几乎就没有其它的方法,整个 ...

  8. [转] 3个学习Socket编程的简单例子:TCP Server/Client, Select

    以前都是采用ACE的编写网络应用,最近由于工作需要,需要直接只用socket接口编写CS的代码,重新学习这方面的知识,给出自己所用到的3个简单例子,都是拷贝别人的程序.如果你能完全理解这3个例子,估计 ...

  9. jsonp的简单例子

    jsonp的简单例子 index.html <!DOCTYPE html> <html> <head> <meta charset="UTF-8&q ...

随机推荐

  1. SVN-钩子祥解与配置

    钩子脚本的具体写法就是操作系统中shell脚本程序的写法,请根据自己SVN所在的操作系统和shell程序进行相应的写作 所谓钩子就是与一些版本库事件触发的程序,例如新修订版本的创建,或是未版本化属性的 ...

  2. Hamilton

    import java.util.Vector; class Hamilton { int start; int a[][]; int len; int x[]; // 记录回路 boolean fl ...

  3. iOS上线项目源码分享

    最强UINavigationController和TabBar结合(会员satian )   最强UINavigationController和TabBar结合的Demo,这里取用了明星衣橱app里的 ...

  4. Linux:备份

    一.每日备份数据 该脚本backupday.sh用来每日备份你需要备份的文件或目录 使用办法 1)打开脚本修改要备份的目录或文件和备份到的目录(如从A备份到B) 2)修改后运行脚本 需要备份数据时,直 ...

  5. 服务端获取客户端html页面内容-2013-6-28-2

    客户端怎么提交  整个html页面?    分析:      1>我们知道b/s模式,也知道http协议.服务端想要获取客户端的数据,客户端就 必须提交给它,服务器才能获取到.     2> ...

  6. 【Servlet3.0新特性】第03节_文件上传

    这是一个Web Project 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web- ...

  7. JavaScript系列文章:详解正则表达式之三

    在上两篇文章中博主介绍了JavaScript中的正则常用方法和正则修饰符,今天准备聊一聊元字符和高级匹配的相关内容. 首先说说元字符,想必大家也都比较熟悉了,JS中的元字符有以下几种: / \ | . ...

  8. flexbox备忘

    伸缩项目的父元素: display:flex || display:inline-flex fiex-direction: row(默认) | row-reverse | column | colum ...

  9. JavaEE XML DOM创建之DOM4J

    DOM4J创建xml文档 @author ixenos 1 写出内容到xml文档 XMLWriter writer = new XMLWriter(OutputStream, OutputForamt ...

  10. C# EnumHelper

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Reflection ...