加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Flash Socket 和 Erlang Socket 通信的注意事项

发布时间:2020-12-15 17:40:22 所属栏目:百科 来源:网络整理
导读:原文来自:http://www.iteye.com/topic/401041 ? 学erlang有一段时间了,现在在维护一套webim系统 并打算扩展成 webgame 的服务程序 在没有使用包协议的时候,遇到好多粘包问题,实在恼火 查阅了相关资料: Flash Socket 的 writeUTF() 会自动增加包头长度的

原文来自:http://www.iteye.com/topic/401041

?

学erlang有一段时间了,现在在维护一套webim系统
并打算扩展成 webgame 的服务程序

在没有使用包协议的时候,遇到好多粘包问题,实在恼火

查阅了相关资料:

Flash Socket 的 writeUTF() 会自动增加包头长度的协议,刚好对应了
Erlang的Socket选项 {packet,2}

这使得两者的通信非常完美,再也不用担心粘包什么的问题了

?

下面是我写的一个Flash Socket 接口:SocketBridge.as

?

Js代码

?

  1. package?{??
  2. ????import?flash.display.Sprite;??
  3. ????import?flash.events.*;??
  4. ????import?flash.net.Socket;??
  5. ????import?flash.utils.*;??
  6. ????import?flash.external.ExternalInterface;??
  7. ????import?flash.system.*;??
  8. ????public?class?SocketBridge?extends?Sprite?{??
  9. ????????Socket.prototype.timeout????=3000;??
  10. ????????private?var?socket:Socket;??
  11. ????????public?function?SocketBridge()??
  12. ????????{??
  13. ????????????socket?=?new?Socket();??
  14. ????????????socket.addEventListener(?Event.CONNECT,?onConnect?);??
  15. ????????????socket.addEventListener(?ProgressEvent.SOCKET_DATA,?onDataRecevice);??
  16. ????????????socket.addEventListener(?Event.CLOSE,?onClose);??
  17. ????????????socket.addEventListener(?IOErrorEvent.IO_ERROR,?onError);???
  18. ??????????????
  19. ????????????if(ExternalInterface.available)??
  20. ????????????{??
  21. ??????????????????
  22. ????????????????ExternalInterface.addCallback("socket_connect",socket_connect);??
  23. ????????????????ExternalInterface.addCallback("socket_send",socket_send);??
  24. ????????????????ExternalInterface.addCallback("load_policy",load_policy);??
  25. ????????????}??
  26. ????????}??
  27. ????????public?function?onError(e):void??
  28. ????????{??
  29. ????????????ExternalInterface.call("sb_onerror",e.text);??
  30. ????????????socket.close();??
  31. ????????}??
  32. ????????public?function?load_policy(host:String,port):void??
  33. ????????{??
  34. ????????????Security.loadPolicyFile("xmlsocket://"+host+":"+port);????
  35. ????????}??
  36. ??????????
  37. ????????public?function?socket_connect(host:String,port):void??
  38. ????????{??
  39. ????????????try{??
  40. ????????????????socket.connect(host,port);??
  41. ????????????}catch(e){??
  42. ????????????????ExternalInterface.call("sb_onerror",e.text);??
  43. ????????????}??
  44. ????????}??
  45. ??????????
  46. ????????public?function?socket_send(msg:String)??
  47. ????????{?????
  48. ????????????socket.writeUTF(msg);??
  49. ????????????socket.flush();??
  50. ????????}??
  51. ??????????
  52. ????????private?function?onConnect(event:Event):void???
  53. ????????{??
  54. ????????????ExternalInterface.call("sb_onconnect",true);??
  55. ????????}??
  56. ??????????
  57. ????????private?function?onClose(event:Event):void???
  58. ????????{??
  59. ????????????socket.close();??
  60. ????????????ExternalInterface.call("sb_onclose",true);??
  61. ????????}??
  62. ??
  63. ????????private?function?onDataRecevice(?eventrogressEvent?):void??
  64. ????????{??
  65. ????????????var?sdata:String;??
  66. ????????????while(socket.bytesAvailable){??
  67. ????????????????sdata?=?socket.readUTF();??
  68. ????????????????ExternalInterface.call("sb_ondata",sdata);??
  69. ????????????}??
  70. ????????}??
  71. ??
  72. ????}??
  73. }??

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读