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,然后就用得不亦乐乎,各种大 ...
随机推荐
- UIMenuController,UIPasteboard:复制,粘贴详细解释
首先,这四个地图.我想实现的功能.[一张照片讲一个复制到另一UIimageView上] 实现代码例如以下: -(IBAction)panGestureTop:(UILongPressGestureRe ...
- uva 1534 - Taekwondo(dp+馋)
题目连接:uva 1534 - Taekwondo 题目大意:有两组什么东西,题目背景有点忘记了,就是给出两组数,两组个数分别为n,m,要求找出min(n,m)对数.每一个数最多最多选一次,使得这mi ...
- 纯CSS3实现的图片滑块程序 效果非常酷
原文:纯CSS3实现的图片滑块程序 效果非常酷 之前我们经常会看到很多利用jQuery实现的焦点图插件,种类太多了,今天我想给大家分享一款利用纯CSS3实现的图片滑块应用,完全是利用CSS3的相关特性 ...
- BMP图片转换为JPEG图片
原文:BMP图片转换为JPEG图片 昨天在家学习,发现很多人把BMP图片转换为其它图片格式,有些人写得简单,有些人写得复杂. Insus.NET在想,一直在做文件上传,下载,或是图片剪切,都有进行过文 ...
- Android KK台,联系人列表#集团放置A~Z之前
更改文件ContactLocaleUtils.java两 (Path:packages/contactsprovider/src/com/android/providers/contacts) 1. ...
- 标签(Tag)的各种设计方案
标签(Tag)的各种设计方案 首先,标签(Tag)是什么? 我的理解:用来具体区分某一类内容的标识,和标签类似的一个概念是分类(Category),有一个示例可以很好的区分它们两个,比如人类分为:白种 ...
- 堆C数组实现
堆栈是一个最后出来该数据结构. 栈的基本操作包含:入栈,出栈,初始化栈,清空栈,遍历栈. C代码例如以下: #include <stdio.h> #define MaxSize 20 ty ...
- javascript中event汇总
原文:javascript中event汇总 ie firefox chrome opera Safari浏览器中对 event的处理并不一致,在此我将各个浏览器中event的兼容处理做了一个汇总,此处 ...
- Linux svnserver存储路径和文件的详细解释
svn有两种存储方式:BDB和FSFS,眼下用的最多的是FSFS方式,这样的方式的话.通常是存储在\db\revs目录下,里面有一堆以版本命名的文件.如:0.1.2.3.4......,那个就是了 比 ...
- PHP进口Excel至MySQL方法
PHP-ExcelReader,下载地址: http://sourceforge.net/projects/phpexcelreader 注意点: reader.php 中的以下这行要改动 1.将 ...