pythonsocket服务端响应多个返回

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pythonsocket服务端响应多个返回相关的知识,希望对你有一定的参考价值。

参考技术A 创建 socket 对象,监听地址
while True: serversocket.accept() 不断接收请求
conn 其实就是 socket 对象,接受到请求之后,conn.recv(1024) 不断拼接出 request,然后解析 request
conn.send(response), conn.close() 响应请求,关掉
能同时响应多个请求是因为把 handler 部分新增线程来处理
在 socket.accept() 之后,把 handle_connection() 放到线程处理。
参考技术B 1 可以响应多个返回。

2 因为Python中的socket编程可以通过设置socket为非阻塞模式,在接收客户端请求时不会阻塞程序的运行,而是可以同时处理多个请求和返回。

3 另外,也可以通过基于多线程或者多进程的方式来实现同时处理多个请求和返回,这可以提高程序的并发处理能力。

Hook OKhttp3模拟服务端响应请求返回mock数据

尊重他人的劳动成果,转载请标明出处:http://blog.csdn.net/gengqiquan/article/details/78119791, 本文出自:【gengqiquan的博客】

许多流程规范化的公司进行版本开发的时候,一般都是先出需求,然后给接口文档和设计图,移动端和服务端同步开始开发。这种情况移动端的被动性就比较大,调试的时候极度依赖测试服务器的接口发布,或者自己写一堆模拟的响应代码来替换实际请求流程。很烦,导致大部分人不愿意这样做而采取坐等接口发布的方式。
这里提供一个hook 流行网络请求库OKhttp3的一种模拟服务端响应请求返回数据的库,方便只有文档而没有发布测试服务器的时候进行开发和调试

Parrot

开始使用

  • 创建一个类,然后定义一些注解了@MOCK(“需要被模拟的请求地址”)的方法

方法返回你需求要模拟的数据


pu
blic class MockService 
    @MOCK("github_user_info")
    public MockResult auction(Request request) 
        Map<String, String> query = MockRequest.getQuery(request);
        String name = query.get("name");
        return MockResult.create(request, "\\n" +
                "    \\"status\\": true,\\n" +
                "    \\"msg\\": \\"操作成功\\",\\n" +
                "    \\"data\\": \\n" +
                "        \\"bond\\": \\"100000\\",\\n" +
                "        \\"auction_plats\\": [\\n" +
                "            \\n" +
                "                \\"id\\": \\"1\\",\\n" +
                "                \\"name\\": \\"汽车街\\",\\n" +
                "                \\"rule_url\\": \\"http://www.rule.com\\"\\n" +
                "            \\n" +
                "        ]\\n" +
                "    \\n" +
                "");
    
  • @MOCK的注解值:github_user_info 对应你需要模拟的方法的接口路径

public interface GithubService 
    @GET("github_user_info")
    public Observable<String> getUser();
  • 只在DEBUG情况下添加 MockInterceptor,防止忘记移除方法影响生产环境
   OkHttpClient client = new OkHttpClient.Builder()
                .retryOnConnectionFailure(true)
                .connectTimeout(3, TimeUnit.SECONDS)
                .readTimeout(10, TimeUnit.SECONDS)
                .writeTimeout(10, TimeUnit.SECONDS)
                .build();
        if (BuildConfig.DEBUG) //printf logs while  debug
            client = client.newBuilder()
                    .addInterceptor(new MockInterceptor(Parrot.create(MockService.class)))
                    .build();
        
  • 获取你模拟的数据结果
  new Retrofit.Builder()
                .baseUrl("http://www.github.api.com")
                .client(client)
                .addConverterFactory(ScalarsConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build().create(GithubService.class)
                .getUser()
                .observeOn(Schedulers.io())
                .subscribeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<String>() 
                    @Override
                    public void onCompleted() 

                    

                    @Override
                    public void onError(Throwable e) 
                        text.setText(e.toString());
                    

                    @Override
                    public void onNext(String json) 
                    // the json is  your mock result
                        text.setText(json);
                    
                );

gradle

compile 'com.gengqiquan:parrot:0.0.1'

maven

<dependency>
  <groupId>com.gengqiquan</groupId>
  <artifactId>parrot</artifactId>
  <version>0.0.1</version>
  <type>pom</type>
</dependency>

以上是关于pythonsocket服务端响应多个返回的主要内容,如果未能解决你的问题,请参考以下文章

Redis管道

Python socket模块实现TCP服务端客户端

使用线程实现socket服务端同时响应多个客户端

如何在 emberjs 的模型挂钩中返回 dataTable 服务器端响应?

text Hook OKhttp3模拟服务端响应请求返回模拟数据

Redis 管道技术