- 浏览: 81305 次
最新评论
-
msdghs:
kidding87 写道涂简单,下面没有更短的了把
priva ...
一道很有意思的java线程题 -
longhua2003:
...
python ElementTree解析xml小记 -
pjwqq:
pansong291PS 写道pjwqq 写道pansong2 ...
Demo_ ZoomActivity 解读 -
pansong291PS:
pjwqq 写道pansong291PS 写道您好,请问那个图 ...
Demo_ ZoomActivity 解读 -
pjwqq:
pansong291PS 写道您好,请问那个图片是用什么做到的 ...
Demo_ ZoomActivity 解读
文章列表
1.创建springboot项目 接口:
package pj.com.cn.myframework.register;
public interface MyPrint {
void printDemo(String s);
}
实现:
package pj.com.cn.myframework.register;
import org.springframework.stereotype.Component;
@Component
public class TestUtil implements MyPrint{
@Overrid ...
pyqt5与老的pyqt4很多地方不一样,慢慢摸索.
qt使用信号和槽,这个叫法 蛮有意思的,不过原理和其它语言的差不多.
早上研究了下如何自定义信号并处理
书中(P95),原例是pyqt4,现环境是py3.5+pyqt5,我做了修改
左侧dial转动值,与右侧spinbox的值保持同步.另外,在dial中自定义过零刻度信号,指针到零刻度时发出信号.
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5 ...
昨天群里讨论mina的ExecutorFilter,有点不明白的地方,早上看了下mina的ExecutorFilter源码,感觉主要逻辑还是很简单的。
源码头的注释:
/**
38 * A filter that forwards I/O events to {@link Executor} to enforce a certain
39 * thread model while allowing the events per session to be processed
40 * simultaneously. You can apply vario ...
最简单的android推送client模型,特点:读写使用同一线程,逻辑非常简单;断线重连;心跳;发消息等。要求不高的基本可以凑合用了呵呵。
package com.example.nbctts;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSock ...
AndroidPN客户端分别启动了读和写线程之后,如果有某种写必须等待结果的又如何处理呢?比如客户端向服务端发个消息,要求等待服务端返回后再对本地逻辑做处理。想象一下客户端要求修改密码,PacketWriter把请求write出去后,成功或失败信息肯定是从PacketReader线程中获得,那么如何把二者关联起来呢,看看asmack的做法。
PacketCollector类
public class PacketCollector {
private PacketFilter packetFilter;
private ArrayBlocki ...
androidPN服务端用的是mina,略去不表,客户端的socket通讯用的是asmack,期间使用xmpp协议通讯,这个xmpp通用是通用了,但用的是xml格式互发,之间不得不加了一堆的xml解析,大部分篇幅都是干这个,对此没多大兴趣,这里只是简单记录一下阅读源码中client与server的阻塞读写,寻找可以借鉴之处。
客户端启动之后,负责管理连接的XMPPConnection初始化:
if (isFirstInitialization) {
packetWriter = new PacketWriter(this);
...
(原文在zguide,有兴趣慢慢看)
提升REQ/REP模式的客户端侧可靠性,由于在此模式下,客户端与服务端严格遵循你一下我一下的乒乓规则,当然现实中不可能这么配合,比如服务器突然挂了,客户端就会阻塞在socket.recv(),然后过段时间,服务器又ok了,客户端也自动重连。但是有的场景客户端需要及时知道服务端状况而不是在那一直等,需要返回个错误之类。
手册提供这种方法:
Client-side Reliability (Lazy Pirate Pattern)
不知道作者起这名字有啥含义,海盗?客户端代码:
import sys
impor ...
前面讲过zmq的device,用来充当客户端与服务端的中间件,以增加灵活性,让服务端也变成可插拔。然而device是zmq封装好的,怎样才能一窥内部的数据流呢?看图
一看这图就明白了,MonitoredQueue在创建Queue同时,还提供第3个PUB socket来发布途经这个Queue的进出信息。
import time
import zmq
from zmq.devices.basedevice import ProcessDevice
from zmq.devices.monitoredqueuedevice import MonitoredQueue
fr ...
Polling and Sockets
一个线程中有多个sokect,同时需要收发数据,zmq提供polling sockets实现,不用在recv()时阻塞。
下面这个例程中创建一个command server来告诉worker何时退出,worker从Publisher获得订阅并打印,('exit'时退出)。
1.PUSH server ,命令服务
import zmq
import time
import sys
import random
from multiprocessing import Process
def server_push( ...
Queue device
这是一个位于客户端可服务端的中间件,拓展了之前的REQ/REP模式,图
通过这种方式,REQ socket和REP socket之间不需要明确绑定了,大家都绑定到Queue这个device就可以了,Queue device来处理请求的发送与返回,灵活度大大提升(不这样估计没人用),看看代码 Queue-device:
#coding=utf-8
import zmq
def main():
try:
context = zmq.Context(1)#IO线 ...
这个是 PUSH/PULL 模式,又叫做pipeline管道模式,取其一去不回头之意,一推一拉,数据滚滚向前。
这种socket封装的原本用意呢,是把数据交给一组worker端干活,PUSH会把任务均匀的(这个好像是zmq的招牌)的分配给下游的worker们,保证大家都有活干,图:
Producer:产生代处理数据,并将数据push出去
consumer(worker):pull到来自producer的数据,处理后,push出去
resultcolltor:pull到consumer的数据处理结果
Producer:
import time
import zmq
...
Pub/Sub pattern 发布/订阅模式
发布订阅模式:发布方不用管理发布给哪个订阅方(看到这句话感觉不太好),有2种场景
场景2比较常见,多客户端向一个服务端订阅,场景1类似与REP/REQ的多服务器模式,避免单个PUB撑不住,(2个PUB的数据都能收到)
pub-server.py
port = '5556'
pub_server_name = 'pub-server01'
context = zmq.Context()
socket = context.socket(zmq.PUB)
socket.bind('tcp://*:%s'%por ...
REP/REQ模式就是最常见的Client/Server模式,zmq有亮点,翻译下:
特点 1. 和pair模式不同的是这种模式下客户端socket可以连接多个server
2. 客户端请求会被交替发送到server组的server
要注意的2个地方:
1. 客户端的 socket zmq.REQ 发送后会被阻塞直到新消息到来
2. 服务端的 socket zmq.REP 会阻塞直到新请求到来
然后保证:Each Request/Reply is paired and has to be su ...
今天学习下pyzmq,感觉怎么样呢,看了官网开头,记录之,基本上也可以算个翻译
Exclusive pair pattern 特点:
1. 双向通讯
2. 套接字无状态(封装的很好吧)
3. 只能有一个对等连接(这能干嘛用,似乎没啥用)
4. 服务端监听,客户端连接
然后:你根本不用考虑message接收的完整不完整,你照做就是了!(原文)
官方example在此:
pairserver.py
1
2
3
4
5
6
7
...
学python没多久,遇到一个解析xml的需求,边学边练,用的是ElementTree,感觉没有说的那么方便,也许E文不好,看漏api,root.findall()搞的象正则表达式,瞎了。希望知道的朋友告诉我
题目这样,比如有个xml:
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student no="2009081097">
<name>Hongten</name& ...