socket.io api,socket.io.js

  socket.io api,socket.io.js

  1.简介socket.io实现了基于事件的实时双向通信机制,基于webSocket封装。但它不仅包含webSocket,还将轮询机制等实时通信方式封装到一个通用接口中,在服务器端实现这些实时机制的对应代码socket.io是跨平台的。可以实现多平台即时通讯。因为iOS上的socket编程主要使用GCDAsyncSocket框架,所以最好选择统一的框架或协议来实现Android、iOS、web之间的多平台通信。基本api,使用socket.on监控传入数据,使用socket.emit发送数据。第二,这个例子说明了服务器使用Nodejs启动本地服务,统一使用socket.io进行iOS和web的即时通信,从而简单的实现了和你猜测的差不多的数据传输效果。

  第三,服务器端使用express进行简单构造,设置模板引擎,静态服务。新手会遇到坑,这就是路径问题。通常,__dirname用于拼接绝对路径//模板引擎。

  app.set(views ,path.join(__dirname,/views/));

  app.set(视图引擎, ejs );

  //静态服务

  app . use(express . static(path . join(_ _ dirname,/public/));

  app.use(/upload ,express . static(path . join(_ _ dirname,/upload/));Socket.io用于监控Socket数据和广播数据,这是服务器主要做的事情。在这个例子中,传输的数据和格式是自定义的,有三种,一种是画笔画的路径,传输一系列坐标点,一种是图像(img),一种是base64字符串,一种是文本,传输字符串var http=

  var io=require( socket . io )(http);

  io.on(连接,功能插座){

  console.log(“一个客户端已连接”);

  //如果连接成功,给自己发一条空消息,回叫。

  socket.emit(connection ,null);

  //路径

  socket.on(path ,functionmsg) {

  socket.broadcast.emit(path ,msg);

  });

  //img

  socket.on(img ,functionmsg) {

  socket.broadcast.emit(img ,msg);

  });

  //文本

  socket.on(text ,functionmsg) {

  //给自己以外的所有其他套接字广播

  socket.broadcast.emit(text ,msg);

  //广播到所有套接字,包括我自己

  //io.emit(text ,msg);

  });

  });四。web上笔画的传输:使用canvas,进行画板的相关操作,并保存所有路径的坐标,然后通过socket进行传输。//画布绘制。

  //获取画布htmlElement

  //var canvas=document . getelementbyid( canvas );

  var canvas=$(#canvas )。get(0);

  //创建上下文

  var CTX=canvas . get context( 2d );

  var colorArray=[black , red , blue , green ];

  //用鼠标绘制

  canvas.onmousedown=functione) {

  //开始绘画

  CTX . begin path();

  //ctx属性设置

  CTX . line width=3;

  ctx.lineCap= round

  ctx.lineJoin= round

  设random num=parse int(math . random()* color array . length);

  var my color=color array[random num];

  CTX . stroke style=my color;

  //tmp是包含所有坐标点的数组。

  var tmp=[];

  var e=e window.event

  //第一个坐标点

  var point={

  x: e.clientX - canvas.offsetLeft,

  y: e.clientY - canvas.offsetTop

  }

  ctx.moveTo(point.x,point . y);

  tmp.push(点);

  document . onmousemove=function e){

  var e=e window.event

  var point={

  x: e.clientX - canvas.offsetLeft,

  y: e.clientY - canvas.offsetTop

  }

  ctx.lineTo(point.x,point . y);

  tmp.push(点);

  CTX . stroke();

  };

  document.onmouseup=function () {

  document.onmousemove=null

  document.onmouseup=null

  //套接字发送路径

  var pathDataDict={

  路径:tmp,

  宽度:3,

  颜色:randomNum,

  screenW: 400

  }

  socket.emit(path ,pathDataDict);

  };

  };关于图像传输:由于输入type=file 无法获取本地图像路径,我们先将图像上传到服务器,然后获取图像路径,再通过canvas绘制并用canvas转换为base64,再通过socket发送出去。这里采用jquery.form框架,使用ajax异步提交表单。新手有个坑,就是表单中提交按钮的类型要设置成button,否则就是表单提交,页面会跳转$(#selImg )。单击(函数(){

  //表单提交

  $(#form )。ajaxSubmit({

  网址:“http://127.0.0.1:5000”,

  类型: post ,

  数据类型: json ,

  成功:函数数据){

  if (data.status==-1) {

  Alert(请选择要发送的图片!);

  返回;

  }

  if (data.status==1) {

  警报(“图像上传失败!”);

  返回;

  }

  //html Dom元素

  let Image=new Image();

  image . src= http://127 . 0 . 0 . 1:5000/upload/ data . status;

  image.onload=function () {

  ctx.drawImage(image,0,0,400,400);

  var base 64 URL=canvas . toda taurl( image/png );

  let base64=base64Url.toString()

  console . log(base64 . substring(22));

  socket.emit(img ,base64 . substring(22));

  };

  },

  错误:函数数据){

  }

  });

  });至于文字,很简单。直接socket发送string关于数据接收,这里有一个和iOS版socket.io的区别在iOS端,发送数据是将数据包装成数组,比如[self . client socket emit:@ text with:@[self . chattextfield . text]];但是前端接收到的数据直接是iOS的数组中的对象,所以不需要取数组中的第一个,但是另一方面,在iOS上需要去取数组中的第一个。这里,我们简单说一下图像的接收。由于您不熟悉canvas,您只能创建一个临时的img标记来显示base64Url的图像。然后在canvas中接收img HTMLElement,绘制图片,最后删除临时img标签。如果有更好的办法,可以留个消息socket.on(img ,functionmsg) {

  console . log( img );

  //base64可以直接在img中显示,获取并绘制img标签对象。

  $(.曹左)。append( img id= tmp img width= 0 height= 0 src= data:image/png;base64,消息 /img

  ctx.drawImage($(#tmpImg )。get(0),0,0,400,400);

  $(#tmpImg )。移除();

  });五、iOS最新官方socket.io这里只有swift版本。之前有老oc版本,但是支持的socket.io是v0.9.x参考https://github.com/pkyeck/socket.IO-objc,但是这显然不是我想要的。所以我就开始混了。一开始参考了https://github.com/socketio/socket.io-client-swift/issues/393,的做法,用了carthage打包的框架,但是各种错误提醒我,oc之前调用swfit文件,先把swift文件直接拖到项目里,使用时再导入项目名-swift.h 。

  好吧,不需要桥接文件什么的,但是在xcode8下,好像还是要桥接文件的。具体方法如下:先将一个swift文件拖入oc项目,xcode会提示创建一个桥文件。这里让xcode自动创建一个桥文件,然后把socket.io-client-swift框架源文件文件夹里剩下的所有文件都拖到oc项目里,使用时导入项目名-swift.h 。

  在iOS端,笔画路径坐标可以直接传到字典。我这里的字典包括了笔画颜色、坐标点数组、笔画宽度、屏幕宽度等信息。图片可以直接传输到base64,文字可以直接传输到字符串。不过要注意在web端和socket.io的区别。具体代码请参考演示链接VI。小演示地址。

  七。还有的用socket.io,方便传输数据。api简单,不会像GCDAsyncSocket那样传输数据时出现丢包现象。对于服务器、节点等。我也是新手。如果我想玩,可以租一个性价比高的国外vps,然后申请域名。可以使用Nginx作为主服务,使用反向代理。这样就方便绑定自己的二级域名了。应用服务可以用Nodejs或者其他,也可以自己研究Nginx的负载均衡技术。大家都知道和国外vps的好处,你也可以建立自己的科学上网环境。

  版权归作者所有:原创作品来自博主wx 62 cd9 cc 616d 1,转载授权请联系作者,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: