Nodejs 使用Protobuf

 

参考:node

Nodejs中使用Protobuf的.proto文件express

 

为了在nodejs服务端使用protonpm

因此网上找了一些教程,这里实现下。 app

 

一 安装protobufjs

在服务端项目文件夹里shift+右键,选择在此处打开命令窗口,输入socket

npm install protobufjs

 

二 .proto文件转成.js

随意写一个测试的login.proto测试

 

 将login.proto放在服务端项目文件夹下ui

 

shift+右键,打开命令窗口,生成jssocket.io

pbjs -t static-module -w commonjs -o login.js login.proto

生成d.ts (服务端不须要,客户端须要).net

pbts -o login.d.ts login.js

  

 

项目文件夹内生成了login.js文件3d

 

三 代码内使用

var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
 
var loginProto = require("./login");
 
 
app.get('/', function(req, res){
    res.send('<h1>Welcome Realtime Server</h1>');
});
 
http.listen(3004, function(){
    console.log('listening on *:3004');
});

//链接成功
io.on('connection', function(socket){
    console.log('a user connected');
	//监听登陆请求
	socket.on('login', function(data,callback){         
                //解析登陆数据
		var loginReqObj = loginProto.login.LoginReq.decode(data);
		console.log("请求登陆的用户:",loginReqObj.uid);
		//返回登陆响应
		let loginResObj = loginProto.login.LoginRes.create();
		loginResObj.code = 200;
		var buffer = loginProto.login.LoginReq.encode(loginResObj).finish();
		socket.emit('login', buffer);
    });
});

  

其它:

 一, 直接使用.proto文件

var ProtoBufJs = require("protobufjs");
var root = ProtoBufJs.loadSync("./zzz.proto");
var AccountList = root.lookupType("zzz.AccountList");
var Account = root.lookupType("zzz.Account");
var accountListObj = AccountList.create();
for(var i = 0; i < 10; i++){
    var accountObj = Account.create();
    accountObj.accountName = "断天涯"+i;
    accountObj.pwd = "密码"+i;
    accountListObj.list.push(accountObj);
}
var buffer = AccountList.encode(accountListObj).finish();
--------------------- 
做者:断天涯zzz 
来源:CSDN 
原文:https://blog.csdn.net/u013052238/article/details/81010794 
版权声明:本文为博主原创文章,转载请附上博文连接!
相关文章
相关标签/搜索