C语言JSON-RPC
{
"result": "Hello!"
}
vonzhou@de15:~$ echo "{\"method\":\"exit\"}" | nc localhost 1234
{
"result": "Bye!"
}
the port users will be connecting to
ctx, cJSON * params, cJSON *id) {
ctx, cJSON * params, cJSON *id) {
{
NULL );
NULL );
(* jrpc_function )(jrpc_context *context, cJSON *params, cJSON*
id);
//方法名
//方法地址
//额外信息
* loop; //eventloop类型
//
* procedures ;
*server, int port_number);
*server,
*loop);
*server);
*server);
*server);
*server);
*procedure);
*server,
*server, char *name);
*sa) {
{
sa)->sin_addr );
sa)->sin6_addr);
* conn, char *response) {
= conn-> fd;
1)
Response:\n%s\n" , response);
response, strlen (response));
1);
* conn, int code, char *
message,
= 0;
code);
message);
error_root);
id);
str_result = cJSON_Print(result_root);
* conn, cJSON * result,
= 0;
result);
id);
str_result = cJSON_Print(result_root);
*server,
* conn, char *name, cJSON *params, cJSON *id)
{
= 0;
0;
NULL;
= server-> procedure_count ;
{
name)) {
server-> procedures [i].data ;
params, id);
not found." ), id);
ctx.error_code , ctx.error_message ,
id);
returned, id);
*server,
* conn, cJSON *root) {
!= NULL && method-> type == cJSON_String ) {
== NULL|| params->type == cJSON_Array
{
== NULL|| id->type == cJSON_String
{
it on the reply and deleting the response Object will also delete ID
!= NULL)
? cJSON_CreateString(
Invoked: %s\n" , method->valuestring);
conn, method->valuestring,
JSON sent is not a valid Request object."), NULL);
*loop, ev_io *w) {
*) w)->fd );
*) w)->buffer );
*) w));
*loop, ev_io *w, int revents)
{
*conn;
*server = ( struct jrpc_server *) w->data;
= 0;
event watcher
*) w;
= conn-> fd;
(conn-> buffer_size - 1)) {
new_buffer = realloc(conn-> buffer,
conn->buffer_size *= 2);
== NULL) {
error" );
w);
new_buffer;
conn-> pos, 0, conn->buffer_size -
conn->pos );
be NULL terminated
= conn-> buffer_size - conn->pos -
1;
= read (fd, conn->buffer +
conn-> pos, max_read_size))
w);
{
connection
closed connection.\n" );
w);
= NULL;
bytes_read;
= cJSON_Parse_Stream(conn->buffer , &end_ptr)) != NULL)
{
1) {
str_result = cJSON_Print(root);
JSON Received:\n%s\n" , str_result);
{
it
end_ptr, strlen (end_ptr) + 2);
conn-> pos, 0,
conn->pos - 1);
If
so, just wait for more.
buffer's end
!= (conn->buffer + conn-> pos))
{
{
JSON Received:\n---\n%s\n---\n",
Invalid JSON was received by the server."),
w);
*loop, ev_io *w, int revents)
{
*connection_watcher;
their_addr; // connector's address information
accept(w-> fd, ( struct sockaddr
*) &their_addr,
-1) {
*) w->data)-> debug_level)
{
*) &their_addr), s, sizeof s);
got connection from %s\n" , s);
connection_cb,
w->data ;
1500;
0, 1500);
0;
has no pointer to struct jrpc_server
*) w->data)-> debug_level;
*server, int port_number) {
port_number, loop);
*server,
*loop) {
0, sizeof (struct jrpc_server));
loop;
port_number;
debug_level_env = getenv ("JRPC_DEBUG" );
== NULL)
0;
NULL, 10);
Debug level %d\n" , server->debug_level );
*server) {
hints, *servinfo, *p;
sockaddr;
= 1;
server->port_number );
0, sizeof hints);
use my IP
= getaddrinfo(NULL, PORT, &hints, &servinfo)) != 0) {
%s\n" , gai_strerror(rv));
= servinfo; p != NULL; p = p-> ai_next) {
= socket(p->ai_family , p->ai_socktype ,
p->ai_protocol ))
socket" );
&yes, sizeof (int ))
p->ai_addr , p->ai_addrlen )
== -1) {
bind" );
( struct sockaddr *) &sockaddr, &len)
== -1) {
ntohs( sockaddr.sin_port );
== NULL) {
failed to bind\n" );
structure
5) == -1) {
waiting for connections...\n" );
accept_cb, sockfd, EV_READ);
server;
&server-> listen_watcher );
ev_loop
ev_unloop
EVUNLOOP_ALL
ev_run
ev_break
*server){
0);
*server) {
*server){
= 0; i < server-> procedure_count ; i++){
);
*procedure){
NULL;
NULL;
*server,
data) {
= server-> procedure_count ++;
* ptr = realloc (server->procedures ,
* server->procedure_count );
ptr;
== NULL)
function_pointer;
data;
*server, char *name) {
= 0;
= 0; i < server->procedure_count ; i++){
= server->procedures [i];
server->procedures [i].name )){
);
* ptr = realloc (server->procedures ,
* server->procedure_count );
ptr;
NULL;
: procedure '%s' not found\n", name);
C语言JSON-RPC的更多相关文章
- Go语言_RPC_Go语言的RPC
一 标准库的RPC RPC(Remote Procedure Call,远程过程调用)是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络细节的应用程序通信协议.简单的说就是要像调用本地函数 ...
- 測试JSON RPC远程调用(JSONclient)
#include <string> #include <iostream> #include <curl/curl.h> /* 标题:JSonclient Auth ...
- go语言json技巧
go语言json技巧 本文总结了在项目中遇到的那些关于go语言JSON数据与结构体之间相互转换的问题及解决办法. 基本的序列化 首先我们来看一下Go语言中json.Marshal()(系列化)与jso ...
- C语言JSON序列化/反序列化
最近想找一个C语言处理嵌套结构体和结构体数组的json库,理想的是能够很容易处理复杂结构体嵌套,并且使用简单的,但是没找到比较合适的,于是打算自己封装一个: 两个问题: C语言结构体本身没有元数据,这 ...
- archlinux中c语言的rpc编程
参考:http://www.cs.rutgers.edu/~pxk/rutgers/notes/rpc/ 启动rpc服务端会出现 unable to register 这个错误,据说是要启用 port ...
- Java c# 跨语言Json反序列化首字母大小写问题
C#标准是首字母大写,Java规范是首字母小写,在序列化成Json之后,反序列化会出现反序列化失败的问题.. 从C#反序列化成JavaBean的时候通过如下注解可以直接解决该问题 @JsonNamin ...
- Go语言JSON数据相互转换
目录 结构体转json map转json int转json slice转json json反序列化为结构体 json反序列化为map 结构体转json 结构体转json示例: package main ...
- go语言json转map
package util import ( "encoding/json" "fmt" ) // json转map函数,通用 func JSONToMap(st ...
- Go语言json编码驼峰转下划线、下划线转驼峰
目录 一.需求 二.实现 三.使用 JsonSnakeCase统一转下划线json JsonSnakeCase统一转驼峰json 一.需求 golang默认的结构体json转码出来,都是大写驼峰的,并 ...
- Java程序员的现代RPC指南(Windows版预编译好的Protoc支持C++,Java,Python三种最常用的语言,Thrift则支持几乎主流的各种语言)
Java程序员的现代RPC指南 1.前言 1.1 RPC框架简介 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦.于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大 ...
随机推荐
- ubuntu12.04 残疾人游客
为了防止陌生人登录你的ubuntu系统.例如,下面的方法,可以采用禁用 游客登录. sudo vi /etc/lightdm/lightdm.conf 在 lightdm.conf 文件末尾加入上 a ...
- NSIS:延时启动软件的几个方法及探索
原文NSIS:延时启动软件的几个方法及探索 有时候,我们想要某软件开机启动,但又不要拖慢开机速度,那么,延时启动技术就显得比较重要了.轻狂在这方面曾经研究过,也实现了自己想要的功能,看看我是怎么做的吧 ...
- jQuery.reveal弹出层
jQuery.reveal弹出层使用 最近用到弹出层,还得自定义UI,原本用的artDialog太庞大,不合适了,于是就找到了这个东西,又小又好用,基础的弹出遮罩都有了,想要什么还不是Coder自己说 ...
- verilog中的有符号数运算
verilog中的有符号数运算 http://hi.baidu.com/lixu1113/item/d00dc095f86aed48f142159a verilog中的有符号数运算 有符号数的计算:若 ...
- CI框架学习笔记
打印SQL语句$this->dbRead->last_query(); 重映射方法正如上文所说,URI 的第二段通常决定控制器的哪个方法被调用.CodeIgniter 允许你使用 _rem ...
- JavaEE(7) - JMS消息事务和异常
1. 使用事务性Session为消息增加事务(NetBeans创建java project: TxSession) MessageSender.java package lee; import jav ...
- JNDI数据源配置注意事项
假设是在原有project上改动 1,applicationContext.xml中改动当中的value值 <bean id="dataSource" class=" ...
- 关于接收POST请求 $GLOBALS['HTTP_RAW_POST_DATA']
总是产生变量包含有原始的 POST 数据.否则,此变量仅在碰到未识别 MIME 类型的数据时产生.不过,访问原始 POST 数据的更好方法是 php://input.$HTTP_RAW_POST_DA ...
- apk当安装程序将文件复制到手机自带的指定文件夹
项目已获得,今天.apk文件以获得另一个非调试手机,发现一个问题. 由于涂料.所以绘图数据的点存储在一个.txt文字档.把它用usb传到指定目录下的,可是明显不科学,由于用户下载了你的.apk文件,你 ...
- git 如何让单个文件回退到指定的版本
1.进入到文件所在文件目录,或者能找到文件的路径查看文件的修改记录 1 $ git log MainActivity.java 结果: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...