string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_art_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [text] => Array
                        (
                            [query] => 简单的多线程socket
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [text] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 8
    [from] => 0
)
RESPONSE:
string(7618) "{"took":25,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":30.319468,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"33922","_score":30.319468,"_source":{"id":"33922","text":"\u7b80\u5355\u7684\u591a\u7ebf\u7a0bsocket","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"qiyuan880794","tagsname":"","tagsid":"[]","catesname":"","catesid":"[]","createtime":"1537838642"},"highlight":{"text":["#em#简#/em##em#单#/em##em#的#/em##em#多#/em##em#线#/em##em#程#/em##em#socket#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"799529","_score":24.805183,"_source":{"id":"799529","text":"\u7b80\u5355\u6a21\u62df\u591a\u7ebf\u7a0bSocket\u901a\u4fe1(java)","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"iyangyuan","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637111786"},"highlight":{"text":["#em#简#/em##em#单#/em#模拟#em#多#/em##em#线#/em##em#程#/em##em#Socket#/em#通信(java)"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"404676","_score":24.562286,"_source":{"id":"404676","text":"Linux socket\u7f16\u7a0b\uff08\u4e09\uff09 \u7b80\u5355\u7684\u591a\u7ebf\u7a0b\u804a\u5929\u5ba4","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"-Lei","tagsname":null,"tagsid":"","catesname":"","catesid":"","createtime":"1632895227"},"highlight":{"text":["Linux #em#socket#/em#编#em#程#/em#(三) #em#简#/em##em#单#/em##em#的#/em##em#多#/em##em#线#/em##em#程#/em#聊天室"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"799547","_score":22.865395,"_source":{"id":"799547","text":"\u591a\u7ebf\u7a0b\u3001Socket","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"reganLi","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637111804"},"highlight":{"text":["#em#多#/em##em#线#/em##em#程#/em#、#em#Socket#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"178169","_score":21.911093,"_source":{"id":"178169","text":"socket\u7f16\u7a0b\uff0c\u7b80\u5355\u591a\u7ebf\u7a0b\u670d\u52a1\u7aef\u6d4b\u8bd5\u7a0b\u5e8f - \u70bd\u79bb","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"hgwang","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637975814"},"highlight":{"text":["#em#socket#/em#编#em#程#/em#,#em#简#/em##em#单#/em##em#多#/em##em#线#/em##em#程#/em#服务端测试#em#程#/em#序 - 炽离"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"203322339","_score":21.872421,"_source":{"id":"203322339","text":"SOCKET\u4e4b\u591a\u7ebf\u7a0b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1639724258"},"highlight":{"text":["#em#SOCKET#/em#之#em#多#/em##em#线#/em##em#程#/em#"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"799554","_score":21.800968,"_source":{"id":"799554","text":"\u7b80\u5355\u5b9e\u73b0windows\u5e73\u53f0\u4e0b\u591a\u7ebf\u7a0b+socket\u670d\u52a1\u5668","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"joshtao","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637111811"},"highlight":{"text":["#em#简#/em##em#单#/em#实现windows平台下#em#多#/em##em#线#/em##em#程#/em#+#em#socket#/em#服务器"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"799522","_score":21.747496,"_source":{"id":"799522","text":"Socket \u591a\u7ebf\u7a0b\u7f16\u7a0b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"beilou310","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637111778"},"highlight":{"text":["#em#Socket#/em# #em#多#/em##em#线#/em##em#程#/em#编#em#程#/em#"]}}]}}"
string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_art_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [text] => Array
                        (
                            [query] => 简单的多线程socket
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [text] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 8
    [from] => 8
)
RESPONSE:
string(7532) "{"took":27,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":30.319468,"hits":[{"_index":"likecs_art_db","_type":"_doc","_id":"799546","_score":21.674288,"_source":{"id":"799546","text":"socket\u7684\u591a\u7ebf\u7a0b\u5b9e\u73b0","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"hssds","tagsname":null,"tagsid":"","catesname":null,"catesid":"","createtime":"1637111803"},"highlight":{"text":["#em#socket#/em##em#的#/em##em#多#/em##em#线#/em##em#程#/em#实现"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"374306","_score":21.618801,"_source":{"id":"374306","text":"java\u591a\u7ebf\u7a0b\uff08\u4e00\uff09\u2014\u2014\u7b80\u5355\u591a\u7ebf\u7a0bdemo","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"ohayo","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1632516271"},"highlight":{"text":["java#em#多#/em##em#线#/em##em#程#/em#(一)——#em#简#/em##em#单#/em##em#多#/em##em#线#/em##em#程#/em#demo"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"43460","_score":21.501926,"_source":{"id":"43460","text":"\u7b80\u8c08\u5355\u7ebf\u7a0b\u591a\u7ebf\u7a0b\u7684\u7406\u89e3","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"zhangjixiang123","tagsname":null,"tagsid":"","catesname":"","catesid":"","createtime":"1635501712"},"highlight":{"text":["#em#简#/em#谈#em#单#/em##em#线#/em##em#程#/em##em#多#/em##em#线#/em##em#程#/em##em#的#/em#理解"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"374295","_score":21.475546,"_source":{"id":"374295","text":"java\u591a\u7ebf\u7a0b\u7684\u7b80\u5355demo","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"ningJJ","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1632516255"},"highlight":{"text":["java#em#多#/em##em#线#/em##em#程#/em##em#的#/em##em#简#/em##em#单#/em#demo"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"524876","_score":21.475546,"_source":{"id":"524876","text":"\u300a\u591a\u7ebf\u7a0b\u7b80\u5355\u7684\u5e94\u7528\u300b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"lxdblog","tagsname":"","tagsid":"","catesname":"","catesid":"","createtime":"1634597753"},"highlight":{"text":["《#em#多#/em##em#线#/em##em#程#/em##em#简#/em##em#单#/em##em#的#/em#应用》"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"704815","_score":21.475546,"_source":{"id":"704815","text":"\u7b80\u5355\u7684\u591a\u7ebf\u7a0b\u7406\u89e3","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"ranjiewen","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1635979223"},"highlight":{"text":["#em#简#/em##em#单#/em##em#的#/em##em#多#/em##em#线#/em##em#程#/em#理解"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"752846","_score":21.250994,"_source":{"id":"752846","text":"\u7b80\u5355\u7684\u591a\u4eba\u804a\u5929\uff08c#\u2014Socket\uff09","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"charles001","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637445747"},"highlight":{"text":["#em#简#/em##em#单#/em##em#的#/em##em#多#/em#人聊天(c#—#em#Socket#/em#)"]}},{"_index":"likecs_art_db","_type":"_doc","_id":"799543","_score":20.93146,"_source":{"id":"799543","text":"\u591a\u7ebf\u7a0b\u4e0eSocket\u7f16\u7a0b","intro":"\u76ee\u5f55\n\nECharts\n\u5f02\u6b65\u52a0\u8f7d\n\n\n\nECharts\r\n\u6570\u636e\u53ef\u89c6\u5316\u5728\u8fc7\u53bb\u51e0\u5e74\u4e2d\u53d6\u5f97\u4e86\u5de8\u5927\u8fdb\u5c55\u3002\u5f00\u53d1\u4eba\u5458\u5bf9\u53ef\u89c6\u5316\u4ea7\u54c1\u7684\u671f\u671b\u4e0d\u518d\u662f\u7b80\u5355\u7684\u56fe\u8868\u521b\u5efa\u5de5\u5177\uff0c\u800c\u662f\u5728\u4ea4\u4e92\u3001\u6027\u80fd\u3001\u6570\u636e\u5904\u7406\u7b49\u65b9\u9762\u6709\u66f4\u9ad8\u7684\u8981\u6c42\u3002\r\nchart.setOption({\r\n    color: [\r\n        ","username":"reganLi","tagsname":"","tagsid":"","catesname":null,"catesid":"","createtime":"1637111800"},"highlight":{"text":["#em#多#/em##em#线#/em##em#程#/em#与#em#Socket#/em#编#em#程#/em#"]}}]}}"
string(14) "127.0.0.1:9200" URL: http://192.168.101.128/searchcore/index.php/cihere_cn_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [match] => Array
                (
                    [title] => Array
                        (
                            [query] => 简单的多线程socket
                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [title] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [from] => 0
)
RESPONSE:
bool(false)
string(14) "127.0.0.1:9200" URL: http://127.0.0.1:9200/likecs_down_db/_search
REQUEST:
Array
(
    [query] => Array
        (
            [bool] => Array
                (
                    [must] => Array
                        (
                            [0] => Array
                                (
                                    [match] => Array
                                        (
                                            [title] => Array
                                                (
                                                    [query] => 简单的多线程socket
                                                )

                                        )

                                )

                        )

                    [must_not] => Array
                        (
                            [0] => Array
                                (
                                    [term] => Array
                                        (
                                            [cate1] => 电子书籍
                                        )

                                )

                        )

                )

        )

    [highlight] => Array
        (
            [fields] => Array
                (
                    [title] => stdClass Object
                        (
                        )

                )

            [pre_tags] => #em#
            [post_tags] => #/em#
        )

    [size] => 5
    [from] => 0
)
RESPONSE:
string(3116) "{"took":16,"timed_out":false,"_shards":{"total":1,"successful":1,"skipped":0,"failed":0},"hits":{"total":{"value":10000,"relation":"gte"},"max_score":20.23507,"hits":[{"_index":"likecs_down_db","_type":"_doc","_id":"67112","_score":20.23507,"_source":{"id":"67112","title":"\u8d85\u7b80\u5355Java\u591a\u7ebf\u7a0b\u586b\u8868\u6e90\u7801","spidertime":"1623077514","contenttime":"1672689020","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/210420\/161044493447.png","tag":"Java|\u591a\u7ebf\u7a0b|\u586b\u8868|\u6e90\u7801","cate1":"\u6e90\u7801\u4e0b\u8f7d","cate2":"\u8f6f\u4ef6\u5f00\u53d1","cate3":"java\u6e90\u7801","attr1":"222KB"},"highlight":{"title":["超#em#简#/em##em#单#/em#Java#em#多#/em##em#线#/em##em#程#/em#填表源码"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"9427","_score":20.23507,"_source":{"id":"9427","title":"\u8d85\u7b80\u5355Java\u591a\u7ebf\u7a0b\u586b\u8868\u6e90\u7801","spidertime":"1622876232","contenttime":"1622876232","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/litimg\/210420\/161044493447.png","tag":"Java|\u591a\u7ebf\u7a0b|\u586b\u8868|\u6e90\u7801","cate1":"\u6e90\u7801\u4e0b\u8f7d","cate2":"\u8f6f\u4ef6\u5f00\u53d1","cate3":"java\u6e90\u7801","attr1":"222KB"},"highlight":{"title":["超#em#简#/em##em#单#/em#Java#em#多#/em##em#线#/em##em#程#/em#填表源码"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"96796","_score":16.111645,"_source":{"id":"96796","title":"\u7b80\u5355\u7684PHP\u535a\u5ba2\u7a0b\u5e8f eggblog v4.1.2 \u591a\u56fd\u8bed\u8a00\u7248","spidertime":"1623213977","contenttime":"1625429994","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/allimg\/090709\/2320490.jpg","tag":"php|\u535a\u5ba2|eggblog","cate1":"\u6e90\u7801\u4e0b\u8f7d","cate2":"php\u6e90\u7801","cate3":"\u535a\u5ba2\u7cfb\u7edf","attr1":"506KB"},"highlight":{"title":["#em#简#/em##em#单#/em##em#的#/em#PHP博客#em#程#/em#序 eggblog v4.1.2 #em#多#/em#国语言版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"33047","_score":16.111645,"_source":{"id":"33047","title":"\u7b80\u5355\u7684PHP\u535a\u5ba2\u7a0b\u5e8f eggblog v4.1.2 \u591a\u56fd\u8bed\u8a00\u7248","spidertime":"1622957380","contenttime":"1678598221","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/allimg\/090709\/2320490.jpg","tag":"php|\u535a\u5ba2|eggblog","cate1":"\u6e90\u7801\u4e0b\u8f7d","cate2":"php\u6e90\u7801","cate3":"\u535a\u5ba2\u7cfb\u7edf","attr1":"506KB"},"highlight":{"title":["#em#简#/em##em#单#/em##em#的#/em#PHP博客#em#程#/em#序 eggblog v4.1.2 #em#多#/em#国语言版"]}},{"_index":"likecs_down_db","_type":"_doc","_id":"60552","_score":15.962564,"_source":{"id":"60552","title":"\u591a\u591aphp\u5728\u7ebf\u8ba2\u5355\u7cfb\u7edf v3.0","spidertime":"1623068375","contenttime":"1670733041","pageimage":"https:\/\/img.jbzj.com\/do\/uploads\/120808\/_1H011Y3.gif","tag":"\u5728\u7ebf\u8ba2\u5355\u7cfb\u7edf|\u591a\u591a","cate1":"\u6e90\u7801\u4e0b\u8f7d","cate2":"php\u6e90\u7801","cate3":"\u5546\u52a1\u5546\u57ce","attr1":"80KB"},"highlight":{"title":["#em#多#/em##em#多#/em#php在#em#线#/em#订#em#单#/em#系统 v3.0"]}}]}}"
简单的多线程socket - 爱码网
qiyuan880794

简单的多线程socket

1.socket 服务器搭建

实例化socket服务器,循环获取请求

package com.orange.util;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * socket服务器
 * 
 * @author Chengjq
 *
 */
public class SocketServer {

    public static int count = 0;

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        int port = 4404;
        // 首先直接创建serversocket
        ServerSocket serverSocket = null;
        Socket socket = null;
        try {
            serverSocket = new ServerSocket(port);
            System.out.println("启动socketServer成功,等待客户端的连接");
            while (true) {
                socket = serverSocket.accept();
                System.out.println("有新的客户端请求连接");
                SocketThread st = new SocketThread(socket);
                st.start();
                ChatManager.getChatManager().add(st);
                //启动定时任务,如果10s内没有进程
                /*Runnable runnable = new Runnable() {
                    int clientNum = 0;
                    public void run() {  
                        // task to run goes here  
                        clientNum = ChatManager.getChatManager().vector.size();
                        System.out.println("剩余客户端数量:"+clientNum);
                        if(clientNum ==0 ){
                            System.out.println("连接超时,或者无客户端连接,关闭serverSocket");
                            //关闭socket
                            //.....
                        }
                    }  
                };  
                ScheduledExecutorService service = Executors  
                        .newSingleThreadScheduledExecutor();  
                // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间  
                service.scheduleAtFixedRate(runnable, 2, 10, TimeUnit.SECONDS);  */
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            System.out.println("serverSocket已超时");
            try {
                socket.close();
                serverSocket.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
    }

}

SocketThread类实现多线程通信

package com.orange.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * SocketThread实现多线程通信
 * 
 * @author Administrator
 *
 */
public class SocketThread extends Thread {

	ServerSocket serverSocket = null;

	Socket socket = null;

	public SocketThread(ServerSocket serverSocket,Socket socket) {
		super();
		this.serverSocket = serverSocket;
		this.socket = socket;
	}
	
	public SocketThread(Socket socket) {
		super();
		this.socket = socket;
	}
	
	public void out(String out) {
        try {
            socket.getOutputStream().write(out.getBytes("utf-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
	
	public void publish(String out){
		ChatManager.getChatManager().publish(this, out);
	}
	

	@Override
	public void run() {
		// TODO Auto-generated method stub
		BufferedReader socketIn = null;
		PrintWriter socketOut = null;
		String inMess = null;
		try {
			socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			socketOut = new PrintWriter(socket.getOutputStream());
			while (true) {
				inMess = socketIn.readLine();
				publish(inMess);
				if("bye".equals(inMess)){
					ChatManager.getChatManager().remove(this);
				}
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			try {
				System.out.println("已结束当前会话");
				socketOut.close();
				socketIn.close();
				socket.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

	}

}

  单例Chatmanage,对所有客户端线程管控处理

package com.orange.util;

import java.util.Vector;

public class ChatManager {
    // 实现单例化
    private ChatManager() {
    };

    private static final ChatManager cm = new ChatManager();

    public static ChatManager getChatManager() {// 返回值为ChatManager
        return cm;
    }

    // 单例化完成
    Vector<SocketThread> vector = new Vector<SocketThread>();

    public void add(SocketThread st) {// 为当前集合添加SocketThread对象
        vector.add(st);
    }
    
    public void remove(SocketThread st) {// 当前客户端关闭连接
        vector.remove(st);
    }
    
    public void removeall() {// 关闭所有连接
        for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程
            SocketThread csChatSocket = vector.get(i);
            if(csChatSocket!=null){
                vector.remove(csChatSocket);
            }
                
        }
    }

    // 某一个线程向其他的客户端发送信息
    public void publish(SocketThread st, String out) {
        for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程
            SocketThread csChatSocket = vector.get(i);
            if (csChatSocket != st)// 判断不是当前线程就发送此消息
                csChatSocket.out(out + "\n");
        }
    }

    // 向当前线程发信息
    public void publish_present(SocketThread st, String out) {
        st.out(out + "\n");
    }
}

至此,服务器搭建完成

 

2.客户端(创建两个客户端)

客户端1(监听指定服务器,通过控制台输入消息进行服务器与客户端以及客户端之间的通信,)

package com.orange;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * 客户端1
 * @author Chengjq
 *
 */
public class SocketClient1 {

	@SuppressWarnings("static-access")
	public static void main(String[] args) {
		try {
			//初始化客户端
			Socket socket = new Socket("127.0.0.1", 4404);
			BufferedReader readline = new BufferedReader(new InputStreamReader(System.in));
			//获取输出打印流
			PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
			String outTemp = null;
			System.out.println("开始准备向服务器端发起请求---\n自己:");
			// 已启动连接socket服务器,准备实时接收来自其他客户端的消息
			GetMess getMess = new GetMess(socket);
			getMess.start();
			// 通过控制台发送消息给其他客户端,以“bye”为结束语
			while ((outTemp = readline.readLine()) != null) {
				//发送信息
				socketOut.println(outTemp);
				socketOut.flush();
				if("bye".equals(outTemp)){
					break;
				}
			}
			getMess.currentThread().interrupt();
			//依次关闭各种流
			readline.close();
			socketOut.close();
			socket.close();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
}

  客户端2

package com.orange;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

public class SocketClient2 {
    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        
        try {
            //初始化客户端
            Socket socket = new Socket("127.0.0.1", 4404);
            BufferedReader readline = new BufferedReader(new InputStreamReader(System.in));
            //获取输出打印流
            PrintWriter socketOut = new PrintWriter(socket.getOutputStream());
            String outTemp = null;
            System.out.println("开始准备向服务器端发起请求---\n自己:");
            // 已启动连接socket服务器,准备实时接收来自其他客户端的消息
            GetMess getMess = new GetMess(socket);
            getMess.start();
            // 通过控制台发送消息给其他客户端,以“bye”为结束语
            while ((outTemp = readline.readLine()) != null) {
                //发送信息
                socketOut.println(outTemp);
                socketOut.flush();
                if("bye".equals(outTemp)){
                    break;
                }
            }
            getMess.currentThread().interrupt();
            //依次关闭各种流
            readline.close();
            socketOut.close();
            socket.close();
        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        
    }
}

GetMess(多线程处理获取其他客户端的消息并且展示)

package com.orange;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class GetMess extends Thread {

    Socket socket = null;
    
    public GetMess(Socket socket) {
        super();
        this.socket = socket;
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        BufferedReader socketIn = null;
        try {
            InputStream is = socket.getInputStream();
            InputStreamReader isr = new InputStreamReader(is);
            socketIn = new BufferedReader(isr);
            String inTemp = null;
            while(true){
                inTemp = socketIn.readLine();
                if(inTemp != null && !"bye".equals(inTemp) ){
                    System.out.println("好友:\n"+inTemp);
                }else{
                    System.out.println("好友:\n已下线,关闭当前回话");
                    break;
                } 
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally {
            try {
                Thread.currentThread().interrupt();
                socketIn.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            
        }
        
    }

    
    
    
}

ok,简单的sockte服务与客户端完成了

先启动server

在分别启动client

输入结束bye,关闭当前会话

posted on 2018-09-25 09:23 Mr.chengJQ 阅读(...) 评论(...) 编辑 收藏

分类:

技术点:

相关文章:

  • 2021-11-17
  • 2021-09-25
  • 2021-10-29
  • 2021-09-25
  • 2021-10-19
  • 2021-11-04
  • 2021-11-21
  • 2021-11-17
猜你喜欢
  • 2021-11-17
  • 2021-09-29
  • 2021-11-17
  • 2021-11-27
  • 2021-12-17
  • 2021-11-17
  • 2021-11-17
相关资源
相似解决方案