Project1

标题: websocket插件实现不同RMMV客户端的数据传输 [打印本页]

作者: guoxiaomi    时间: 2016-5-3 23:25
标题: websocket插件实现不同RMMV客户端的数据传输
本帖最后由 guoxiaomi 于 2016-5-9 22:39 编辑

最近试了一下搭建个人的博客,选择了SAE做服务器。现学了一堆PHP,SQL, Javascript,html5等等之后惊奇的发现SAE的Channel通讯服务!

于是在自己的网站上搭了一个服务器,也写了一个rmmv的插件。

WebsocketPlugin.zip (2.79 KB, 下载次数: 161)

用法非常简单,我直接写到了帮助里。这里把帮助贴上来。

/*使用方法,首先联系作者注册一组账号和密码(8位),假设其中之一是username和password
* 作者邮箱是 [email protected] 你也可以访问作者的主页 http://www.gxmatmars.com
* 嫌麻烦的话,可以先用guest00~guest04这5个账户测试一下,密码都是12345678
* 1. 获得channel
* 在事件脚本中调用方法 MMO_createChannel(username, password);
* 等待服务器返回channel地址,一般需要若干秒。返回后会自动调用 MMO_callBack()并生成websocket对象MMO_ws
* 2. 向其他客户端发送数据
* 在事件脚本中调用方法 MMO_send(msg);
* 其中msg的格式必须为:"_chat=username&message=text" ,其中username换成目标客户端的用户名,text换成要发送的字符串
* 3. 客户端收到数据
* 客户端收到数据后会自动调用方法 MMO_wsOnMsg(event);
* 客户端收到的数据格式为"chat=username&message=text",其中username是发送者的用户名
* 请自行编写此方法以处理数据,就在这个文件里;
*/

由于我自己也是初学网站,所以请大家手下留情,不要SQL注入攻击啊,或者黑掉某些网页啊,或者不断的刷新网站一类的(其实我也不知道有哪些危害行为)……

============2016/5/5 第2次编辑============
修改了插件的使用方法,上述的函数也都保留了。
现在可以在插件中设置变量friendname,以方便与固定的客户端通讯。

* 新的插件文件已经更新了。*




使用方法有两种:脚本或者是插件命令。
脚本的格式如下:


插件的格式如下:


可以用\f1代替guest01,因为在插件设置里设置过了。


所有的这些操作,依次是设置guest01的变量10为10,设置变量10为字符串'test',设置开关10开和设置开关10关。

服务端关于这个的代码php是这样的:
PHP 代码复制
  1. // $level <=0 只能用_chat
  2.                         if ($level <= 0) {                               
  3.  
  4.                                 if (preg_match('/^_chat=(.*?)&message=(.*)/',$message,$match) !== 0) {
  5.                                         $channel = new SaeChannel();
  6.                                         $chat_msg = "to=".$match[1]."&from=".$name."&content=".$match[2];
  7.                                         if (get_level($match[1],$dbc) == $level) {
  8.                                                 $channel->sendMessage($match[1],$chat_msg);
  9.                                         }
  10.                                         break;
  11.                                 }
  12.                         }


============2016/5/9 第3次编辑============

范例在这里:百度网盘

为了缩小体积只拷贝了www文件夹,在不同的电脑上登陆,使用自己的账号密码,并输入朋友的账号就可以试玩了!

比如一个人输入用户名密码guest00&12345678并设置朋友的名字为guest01,另一个人输入用户名密码guest01&12345678并设置朋友的名字为guest00。

作者: 小叮鈴    时间: 2016-5-5 00:22
具體有甚麼用啊?
作者: iusan    时间: 2016-5-5 10:16
从理论上说,是不是也能通过这个方法实现同一玩家不同设备之间的存档共享?
作者: 小叮鈴    时间: 2016-5-5 14:03
能連成怎麼樣? LA做個範例來看看拔{:2_249:}
作者: 汪汪    时间: 2016-5-5 21:20
使用别人的网站进行信息传递......感觉有点怪怪的
作者: guoxiaomi    时间: 2016-5-6 09:28
小叮鈴 发表于 2016-5-5 14:03
能連成怎麼樣? LA做個範例來看看拔


你先这样试一下,不要急着要范例:

新建一个工程,加入插件,然后按照我上面的第2个事件图(ID:005)设置一下事件。

1. 对话选择登陆,等几秒弹出登录成功的信息
2. 对话选择‘改变变量10=10’,之后打开F9看看变量10的值,应该立即改变为10了。

这个是因为你登陆的账号就是guest01,改变的变量的时候输入的目标也是guest01,自然改动的是本机。

如果要实现联机功能,你把ws_login后面的guest01改成00,然后打包到另一台电脑上运行。先同时都登陆成功,之后在guest00客户端上运行插件指令ws_set guest01 v10 i 10,在guest01客户端上用F9看看是不是变量10的值已经改变了?
作者: heying1900    时间: 2017-6-22 08:51
是一个很好的实验方向!支持,关注!!
作者: walf_man    时间: 2017-6-22 21:07
不错,学习了,sae能直接使用websocket?
另外,能做一个同屏互动的吗?服务端和客户端代码都要。感谢。
作者: guoxiaomi    时间: 2017-6-22 21:14
walf_man 发表于 2017-6-22 21:07
不错,学习了,sae能直接使用websocket?
另外,能做一个同屏互动的吗?服务端和客户端代码都要。感谢。{:4 ...

SAE 利用 channel 服务实现 websocket 通讯,等于是 SAE 自己搭了一个 websocket 服务器,然后所有人都连到上面去。与你自己的服务端代码之间的通讯是 http 回调。所以自己只需要做一个 web 端就行。

详情看这里: http://sinacloud.com/doc/sae/php/channel.html

不过现在也之间支持 websocket 了,只需要用 node.js 的项目,但是需要自己部署环境,那个我不会……

我可以告诉你如何让客户端与服务端进行 websocket 通讯,传输少量的信息。但是不想花时间在显示通讯内容上。
作者: 清澈淌漾    时间: 2021-3-27 10:36
最近想试试MV当前端用 康康




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1