添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

客户端:https://www.npmjs.com/package/vue-socket.io
后端:web-msg-sender

前端代码
main.js

import VueSocketIO from 'vue-socket.io'
Vue.use(new VueSocketIO({
    debug: true,
    connection: 'http://demo.com:2120',  //
mounted(){
            this.$socket.emit('login', this.name);	//this.name 用户名
            //添加socket事件监听
            this.sockets.subscribe('new_msg', (data) => {
                console.log(data);	//收到消息

后端部分
web-msg-sender

Web消息实时推送,支持在线用户数实时统计。基于PHPSocket.IO开发,使用websocket推送数据,当浏览器不支持websocket时自动切换comet推送数据。

线上demo

接收消息页面:http://www.workerman.net:2123/
后端推送接口url:http://www.workerman.net:2121/?type=publish&to=&content=msgcontent
to为接收消息的uid,如果不传递则向所有人推送消息
content 为消息内容

注:可以通过php或者其它语言的curl功能实现后台推送

1、git clone https://github.com/walkor/web-msg-sender

2、composer install

后端服务启动停止

Linux系统

php start.php start -d

php start.php stop

php start.php status

windows系统

双击start_for_win.bat

如果启动不成功请参考 Workerman手册 配置环境

前端代码类似:

// 引入前端文件
<script src='//cdn.bootcss.com/socket.io/1.3.7/socket.io.js'></script>
<script>
// 初始化io对象
var socket = io('http://'+document.domain+':2120');
// uid 可以为网站用户的uid,作为例子这里用session_id代替
var uid = '<?php echo session_id();?>';
// 当socket连接后发送登录请求
socket.on('connect', function(){socket.emit('login', uid);});
// 当服务端推送来消息时触发,这里简单的aler出来,用户可做成自己的展示效果
socket.on('new_msg', function(msg){alert(msg);});
</script>

后端调用api向任意用户推送数据

// 指明给谁推送,为空表示向所有在线用户推送 $to_uid = ''; // 推送的url地址,上线时改成自己的服务器地址 $push_api_url = "http://workerman.net:2121/"; $post_data = array( 'type' => 'publish', 'content' => '这个是推送的测试数据', 'to' => $to_uid, $ch = curl_init (); curl_setopt ( $ch, CURLOPT_URL, $push_api_url ); curl_setopt ( $ch, CURLOPT_POST, 1 ); curl_setopt ( $ch, CURLOPT_HEADER, 0 ); curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, 1 ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $post_data ); $return = curl_exec ( $ch ); curl_close ( $ch ); var_export($return);

常见问题:

如果通信不成功检查防火墙
/sbin/iptables -I INPUT -p tcp --dport 2120 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2121 -j ACCEPT
/sbin/iptables -I INPUT -p tcp --dport 2123 -j ACCEPT

workerman相关参见 www.workerman.net

workerman更多有趣的应用:

小蝌蚪聊天室

多人在线flappy birds

客户端:https://www.npmjs.com/package/vue-socket.io后端:web-msg-sender前端代码main.jsimport VueSocketIO from 'vue-socket.io'Vue.use(new VueSocketIO({ debug: true, connection: 'http://demo.com:2120... 接收消息页面: ://www.workerman.net:2123 初步推送接口网址: ://www.workerman.net:2121/?type publish&to &content=msgcontent 到为接收消息的uid,如果不传递则向所有人推送消息content为消息内容 注:可以通过php或其他语言的curl功能实现后台推送 1,git clone 2,作曲家安装 初步服务启动停止 Linux系统 php start.php开始-d php start.php停止 php start.php状态 Windows系统 双击start_for_win.b 2.处理 引用 webmsgsender 基于 web-msg-sender 进行实时消息的推送 web-msg-sender 是基于 PHPSocket.io 开发的,而 PHPSocket.io 是基于 workerman 开发的。 多浏览器支持 支持针对单个用户推送消息 支持向所有用户推送消息 长连接...
1.下载web-msg-sender 下载链接。并解压缩到任意目录(你可以放到tp5目录里,也可以放到www目录) 2.启动:linux系统cd到到web-msg-sender目录里运行php start.php start -d windows系统进入到框架目录里双击start_for_win.bat文件启动。 windows会看见如下输出 3. 服务器推送 /application/lib/...
use Workerman\Worker; //use Workerman\Autoloader; require_once __DIR__ . '\Workerman\Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯 $worker = new Worker("websocket://0.0.0.0:2727"); // 启动4个进程对外提供服务 $worker->count = 1; $uid = 0;
参考 https://www.yisu.com/zixun/603043.html 安装完成之后 a) 跟application同目录下,即根目录下 创建 server.php, 内容如下: b) 创建 workerman 的控制器app/push/Worker 目录 c) 启动workerman服务在cmd下运行 php server.php a) 浏览器测试连接打开chrome浏览器,按F12打开调试控制台,在Console一栏输入(或者把下面代码放入到html页面用js运行) b) h5
如何在客户端使用 vue-socket.io 与服务器端实时双向通信前言vue-socket.iovue 中的使用安装依赖模块使用在 main.js 全局引入模块在模板 .vue 局部引入模块结语参考 基本的 HTTP 请求可以满足客户端访问数据的需要。如果需要“实时”刷新数据,可以采用轮询(设置一个定时器,每隔很短的一段时间发送 HTTP 请求重新获取数据)或长轮询(long poll,服务端收到 HTTP 请求后,将回调阻塞到有新数据产生)的方式。 轮询需要持续频繁地发送请求,会造成带宽和服
web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接通讯,如果浏览器不支持WebSocket则自动转用comet推送。 通过后台推送消息,消息可以即时推送到客户端,非轮询,实时性非常好,性能很高。 多浏览器支持 支持针对单个用户推送消息 支持向所有用户推送消息 长连接推送(websocket或者comet),消息即...
web-msg-sender是一款web长连接推送框架,采用PHPSocket.IO开发,基于WebSocket长连接通讯,如果浏览器不支持WebSocket则自动转用comet推送。 通过后台推送消息,消息可以即时推送到客户端,非轮询,实时性非常好,性能很高。 多浏览器支持 支持针对单个用户推送消息 支持向所有用户推送消息 长连接推送(websocket或者comet
// SPDX-License-Identifier: GPL-3.0 pragma solidity >=0.7.0 <0.9.0; contract Purchase { uint public value; address payable public seller; address payable public buyer; enum State { Created, Locked, Release, Inactive } State public state; // initialized to Created by default modifier isTwiceValue() { require(msg.value == (2 * value)); ;} modifier isBuyer () { require(msg.sender == buyer, "buyer only"); ; } modifier isSeller() { require (msg.sender == seller, "seller only"); _; } modifier isIn(State state) { require(state == state, "invalid state"); _; } constructor () payable { seller = payable (msg.sender); value = msg.value / 2; require((2 * value) == msg.value, "value must be even"); function abort) public isSeller isIn(State.Created) payable { state = State.Inactive; seller.transfer(address(this).balance); } function confirmPurchase() public payable isBuyer isIn(State.Created) isTwiceValue buyer = payable(msg.sender); state = State. Locked; } function confirmeceived() public isBuyer isIn(State.Locked) payable { state = State.Release; buyer.transfer (value); } function refundSeller) public isSeller isIn(State.Release) payable { state = State. Inactive; seller.transfer(3 * value)What are all the "terms" in the above smart contract?
- buyer:一个公共的地址变量,表示买家 - state:一个公共的枚举类型变量,表示合约的状态 - isTwiceValue:一个修饰符,表示需要保证msg.value等于2 * value - isBuyer:一个修饰符,表示需要保证msg.sender是买家 - isSeller:一个修饰符,表示需要保证msg.sender是卖家 - isIn:一个修饰符,表示需要保证状态是指定的状态 - constructor:一个构造函数,初始化合约 - abort:一个函数,表示卖家取消交易 - confirmPurchase:一个函数,表示买家确认购买 - confirmeceived:一个函数,表示买家确认收到商品 - refundSeller:一个函数,表示卖家退款