上一篇日志利用推送源周期性地向订阅了某一事件的所有网页端推送信息,但怎么实现向特定的某一个用户推送信息呢,想象一个网络聊天室,怎么向单独的一个好友私聊呢。问题的关键就是那个SessionID,Pushlet默认是用java.rmi.server.UID参数的随机字符串作为会话标志,这就造成我们没法跟一个特点的用户对应上,也就是说客户必须在joinListen的时候提供一个他的ID,就像登陆qq时,输入用户名一样。好了,这里就列出怎么修改相关代码,实现上述功能。
同样,首先用MyEclipse新建一个web工程,我这里命名为PushletTest2。不同的是,我们不引用pushlet.jar包了,因为我们要更改源码,在下载pushlet的时候里面就包含源代码了,最外层是nl包,加入我的工程的src里。好了,加进去之后会报错,将log4j.jar加入引用就好了。之后,同样别忘了把pushlet.properties和sources.properties加入WebRoot/WEN-INF下。工程结构如下:

aaarticlea/bmp;base64,iVBORw0KGgoAAAANSUhEUgAAAQgAAAG6CAIAAAB7lk/WAAAACXZwQWcAAAEIAAABugBAHhjVAAAs/klEQVR42u2de5zU1N3/v9ldLsuirIpAVWTF4qWKUKGo9dKtSldF8fZ71D62ilpR/Fkfq9ifKFJFvPy8Vp9qC2rFK4gVAUXAWgUBEUWLV24+MoDIwiIMC7s7OzPJef7IErI5l5xkMklO5vt+zWvJnDm3hJx8z0m+n3w1QghQvPbKpAsvHgl+SaXmT56fmg81tZAaUVtTU1PruyoEiQSNOTAKIZWaPyIFNQBXaFoq9d2z5MDJtYBjA1GLMmbqa69Mkq/i8+m3WR8AmJyCmhTUQor0ea9Pn1xNCu6cnIp6NxHEGxXMVPl51Gev3TbgwnttX8fM31l31yEaIfPnz08BQAoAUiOi3k0E8Ua7gfHopHF0jj+MHE8nPjn+AQAAIFdf2y+35dl8c6a5sakl3VjZsbUWUu+trQGogfmpVE0NpGpqa1KO4pqmWdvyczmzlD2/VY+nCaG9da9leVUFPiNFomXPwHh00jjmGGCm78pW5HuceNuIrPm1Q2eo3LftpxHb9BHzAaAWauZDqhYARoyocRQnhGha2/LG2nDFLOVIAepEZ+JoxeqATFlePbxtJAG0W2Poet4w2j66ntf1XKZlF7PYHyfc9EPqY8juoD81NbWTa6E2lYLUnb88ZN3kO2N3V8oxQqLuDhJH2k2lcjnTAhAAIARy2ZZdO7bzSu5o7gjZHYwfvn+ppubSO+80v9QK2rZPjaxtOtHEfm0GtxPakcf86npRZ5ayt+6oB81Fgmk3MAwjX1XVzZ6yds3n5ob5ZMP+9+m/jWz4aHLLN29V/vis/YeMuOLqZ80RBQAE/q5pQAhoAEQDjcCzT11Jt03PbYCaL9EnnOsEjJ6k2WduPJhTO0cRZj04KhJJu4Gh63o6vVXXc8QghqG3tjRnmneaP5n3qex/AaDlm7cOvnjc+lfGw5AR599xOa+Nybe/7K9zDgMij9eVA7OUTOs4KpJKu4HRuL0h09Kcz2UJMQgh+VxWz+d4JRsWPNxz0FHnH91/6ow7GxY8MvwXN01bkQUgAPbTizz9pxlvT/uN7/55XaDbS/lrS751HBUJpt3A2Nbw/a7G7flslrQtM0h5eQWvZMvGpXv3Omr39ocA0JRuNccFIWBefJ964O0PXr+YLsuc9NsnUcxbRo5S9l/tl3Z7QfukiF69OGZNjlJMsyOzCkISQLtTU/45xvo3x3Tdq76qV83qxe8eduKpTZtSTbt6zSgfbV9YPPOXxctnnxv1DiKIH3xOBta/fNFBJ/RPf9d41ciHnpk0uvrAvb/78Iu65y6z51kx7+yo9w5BfMKeKbl6125Mrep9yi/Le+x99fUXlPc4qKxDx42pVTgSkMTg02J8/+Fz6959xJ7S59SbDjj+ch9VIUgMwfsqCMIgALfzQAoiSKxAi4EgDGJnMa75xaBojwiCQIQWY9FDx1nbJ41eevcZB9B57pj7fVTHBSlxfN6udSD/ZNBk+u/7XfDfa6yv3y1/GwBuff25bctXv/jXWTdMHL1t+epJd90T9cFBSpdCpa3gUeEEAIvuPW7Y2NGtmydm0plMJpNJp7v1GQ4A25av3rJx6+p1W82NqI8MUtIEYzF0PW85DZn+SrlsKy9zK+Sh80AA6NwLOgMAwF2X31oJ8OJfZ61etxUAxt3698P6dAeAa34xaOKCT6I+REgpwl58e32pVC6XzWaz2Wyr+WnatWNbwyZu7ixApt7+uXvKswBww8TR4++/EgD+Mvf+34waDgDMUaHZsL7aNxzZoj7CiJIEc1fKMPKVlVWVlV0rK7t26dK1W/X+2WzGXpX972l3ftK4bvvmf73UuG57p57nzn7gTzPHnnfUUT3eGHvL4n88VTdYNzeOOqrH9JsHMpsju4H2nuEOSR3eiUZ8E8AaAwpTOA27YRSzznQ6vfj5KXQ6Uz/EGwM4NhB/BGMxGrc3bK3f0PD9+oZN67bWb9i+ddOuRq5Y3FI49Rx0VMOCRzr1uQYyacfHHBUXPLycWYNpDXCahBSPYCxGgQonyGTsGdLQWTAqxOolE6ZWCUHkYT/gK95zDKbCqUfvPRnSUC0YFQgSDmE/+WYqnP614HN7nismroz6sCClTjDPMeQLMhVOOBKQuBG2xUCFE6IEwawxECRhlBVehR1UOCHJAIVKCMIgLkIl3wVvOrlXEQ4LUuqoZzHm331sWSZvff18TeMx/fa2vhqdK2rv+DTqPiLKE/btWgdeFU4AUNaUPeCMm7t0KQeAzeu3VDV/csDQX1lfdy6bHN7BQ5JLMC4h/gp6VTiZGAbp0qW8+xEH7Eo1VO7VFQDsX3cYihlAJJ5EvMaQj+Fkkc8DAOxKNQAA7HaIsr7m84AghROlxQCPMZxM8nlj8/otlXt1BU1Lb9qyZm39QNvXfN4QlKU9C72+upwXZgmEsW+Y8aKY/UFiQsQWw5PCCQAaPpr8k+P7H3Rw9yPqrl0yZ/6s198FgFdfnL1k7oIlc+avWP71N/UtvPtUtHrJSnGcoGKfdkceR9gx+waqqdQlyrtSj04a97tf/8EwDIfC6Y2FM3lrjPUvX2QqnA7+z2nff/T85vVbXn1x9pU3XmYtvlNzJ53/9Gr2rvKjhFnhOBx/eZU48jCL0MYBY5QpRMQWoxCF0wFDLqvcq2u/Q3qZi+/OnTtU7tU1pxte2g8GpoVBNZXSRLzGKFThxFh8c6/BgilTIFH2aHPh+IpqKoWI8jnGH0aO96ZwOrAKAMbfcgoAdD2gasObY9I/dAEA+1pc10Ut8qLs2bd5awZBHteGUJKuHMpMc5kKp/feXLYzb+xVsWdC2O8n+/x8bKivovIXVxaJOcr4Sm1MrdI6dC/vcdBuhVP3jalVl7/87bebMpe//K31CXlUwO61RMiNIsVGGYuBCickTAIWKqHCCUkGAQuVfIMKJyRWKDOVKpw3HvwpM/2cW/4dddeQ+EFY/GPqROKLOBd8/f6ftmbzjs+Xs0bNemCgv6aRBFNCFuO1+wedc/NHjsR1C+/MNf3wPyuXoN1A7EQsVPJd0IfCKU80S6yxvH7HFXe9ctoxh91y/H4A0PeI46fdO/ii25bRpRzPsAnf90mMjOsur5RkfnS+CpCIXUL8FfSncMrrmmGYPn97EvcfeL0GQAA++/wEZinS3lnQnu5pBwnldChfSr4JT11CBCjzgM+BpXDSNE1S4ZQjmkHAIGCXbBg66DoYBuQMl/MPr8clhZIWA9ornLLZVhmFk66DrgMAsZsMnRAgGtEgr4sGBtMpkFBqJ146syCzFNMoyUyoZNriNYcDnkZVi2EpnABAUuE09LCa7NcvduvaIW/sMRl5HXRiGAbJCgcGEToFEqEOyXGuE8o9ka7Nng3kPNgJS+xBhGoqZg8Rk2Bi8IVf0Izh9MMPmwBgy+YNG1Kr8m02RBTDqeWbtwDALtnQCdENyBtEJy7POl0vq3QGH0EAzdO08DOVV499QhhUW4lEVYthKZwAwKvCqUe3ji+81/Z+dV2HvEEMnWSL8BYF+tovX6rA85XWzdJ1orZWgKprDEvhtGDulIZN64hHhdO773922jGHjbn0JN0goAEQLc+xGEyNkSNRRofkmsfSxwpaF8tu7dA1W+mueRCIjxNhyDGcvupz/U96dQcAAqARAI288MDQ2x9cGNBRjQY8uQMk+YeSqXAyTnvBvKMFu/958f8PveMRJQcG6mOLgapPvuVhxnCaff+vzOd6GrSNjHJl16A4HopB8i0GKpwQPzBdC+PsJIsgIRAXoRKCxIrkT6UQxAeqPuCzwIhKSDFQz2JgRCUkBEo3opKn2/+BPzsTuLXG9jkdz4EXknjLuHQjKhHKzds1syfE5zfhe0MF3lZQ0H2WP4axHe084hJRSV5vhBGVkBCIUUQlSb2Rv4hKhahSfaiLBK6HQaUI2nLdWV6HXfcL5LRNTMGWWkYjLhGVQFpv5C+iEtmt1CHePbpJe49UOhEoD3PSXhgEQt2S4DymSzH9yV3743o0JPdL5hgK4lR5OuzRErHFMPVGup7bb78fbdm8wYyoZK+KqTda/8p4GDKi7tdnDmREVPrk+mmpkA8ikYiz4RsfS5Gg+uO7ngSIn+ISUQm8643iE1EJihk/SXztL3Z/fNtYH32OFXGJqORPbyQfUYkpLbL/ZKW7/ncSN3WRI5s1kZBZPwjactQD7ec/vLWBvZ/MY0JXwtsvyWMo08P4UyoRlZjrBHE2AfRE3Ec2f23xCop30LWI1w6LOy/ZXJxR5kZBJBGVwnyAldS2FEUZX6lIIiqFOVdOaluKoozFQL0REiZxeRkCgsSKuAiVMDASEiuUmUohSJgos/jmgUIlpBioZzFQqISEAAqVUKjkv8/Fex7Cqzm0g4NCJRQqyRKmUIlXs7/d9HF8UKiEIAxQqOQOCpXs9RRPqOQ6MWM2Ldlhr0YDhUruoFApBKGSTLAOpoMwvReByKRQqBQAKFSS7LNko6G1JQCFSsGAQqXC+xzm8XEFhUooVIpAqET3x1HK3hPHftFhBB3bGhVP3YfpQ6ESN5sAFCoVKFQqPINrKX9H2yKmz5JoUKikaFuKooyvFAqVFG1LUZSxGChUQsIEhUoIwgCFSgjCQJmpFIKEiTKLbx4oVEKKgXoWA4VKSAigUAmFSv77nODnIShUQqGSLAQjKqFQCSlxUKjkDgqV7PWEKVRyPfKS/fEBCpXcYbqmiQU9tDgGhUquo8LREFOE5MjGPKqBgEKlAPAt6JEBhUriX1GohEKlCPrj28aq7hCJQiUUKsVRqMTbKUdBZluBgEIlbjYBkiIYed2PfFu8guIdlNT9yHfY64RHpri4P5IHOSiUubuMQiVF21IUZXylUKikaFuKoozFQKESEiYoVEIQBihUQhAGykylECRMlFl880ChElIM1LMYKFRCQgCFSihU8t/nuD0PCbA/KFRCoZIs8RcqBdgfFCohCAMUKrmDQiV7PUUSKrm2RfeQfs85r34f/UGhkjtMVzaxoIeW5qBQScZtWSBCsrvl2ivk9bzA/qBQKQBcr1iFUCJCJYFbvutey4tm5UGhUjD4s0XyNXs9NYPqj28bG0ifXeuR7JuP/qBQCYVKsRAqMY2DIFqSI6ejEq/9oUGhEjebAHoi7iObv7Z4BcU76FrEa4fFnS9GD2UOsuR/hMwuxPRZEg0KlRRtS1GU8ZVCoZKibSmKMhYDhUpImKBQCUEYoFAJQRgoM5VCkDBRZvHNA4VKSDFQz2KgUAkJARQqoVDJf58T/DwEhUooVJKFFFmo5G8virTvKFRCEAYoVHIHhUr2eooqVBIfMcnjHAgoVHKH6aYmFvTQUhgUKsn4HUoeMcFxDgoUKgWAqw9zIZSIUEmmnqIeZwcoVAoGf7ZIvubCRT9h7ldQToo+7FVQoFAJhUqxECoJjphgv6BoZgSFStxsAsSCHsls/triFSxQBuS1wzILBk89LOSIFWUGq8qjGRQqKdqWoijjK4VCJUXbUhRlLAYKlZAwQaESgjBAoRKCMFBmKoUgYaLM4psHCpWQYqCexUChEhICKFRCoZL/Pof/PITpRJw0J0IUKoXTVlCQIguVZErRj8+L5DeFQiUEYYBCJXdQqGSvpxhCJUHr9H6FM21DoZI7TO83saDHk+wGhUrM1ulSYS69UKgUAChUkuyzQqBQKRhQqFR4n2MFCpVQqBQLoRLdOritOpjxk4IChUrcbAJQqFQMoZLXUkW1SDF9lkSDQiVF21KUiJ98y7Mxtar3Kb8s77H3bqFSR1OodNPJvR5ZWF+koxPmeZPUthRFGYuBQiUkTFCohCAM4iJUQpBYocxUCkHCJC5CJZMdq+ate26fHavmRX1YkFInXhZj3XP7VB/RK72yvs/l2wuvDfHEk+POMDeuGz836r5Ev1PB3K71oTdikk4BQD0A7Fg1r9vhdcw8AvcE5nNfsUenOE+R4D1GiMqT1II+e54cd4Yj0TzVrhs/19pwLUJn4DXnKQ/dFl3K3LDSPUAK5pGJd3hKh6vnDhk7fcCdbxxx97xeDy6ufvSjDk98AVfPJYSkV85NTa5Ozz8i9bdqcaPQ3iHHdUOmuCSBHDSZSgJpSJ4n7qjzmpMu8sQddeJ6BGWZPRFn4+V0lJLfNYtg1hie9EY91y9a9/Gn9UuWbl+0kLwzp9PcWfvOeqXn+kUA0O3wunQKADKZjOcRTiOpGpPJg0giP2MpfMJW1ClfME6EnvRG9XPvHvDkFXS6mfg8QDqVBuFsikag5mFCKJc++/TGoZux0gHcFUi+Z2jMuZOrRso1D3O/JLtET5aYcxKv83glFjPBWAyveqMVDfVnHXoQ/VnRUF9zydR0PVQfUV0/4xL5DhA5tzlHBsIX09g3TJjZQKjL8eStTTgudITll2ofFeI8vP2SgV5dXDd+LvNs5qXzqjU/fqb+YRGMxfCqNwKAhz9cxqyq2+F1kAEA8DqbMk8O4ubC6VrK/lXyKhumLsfRE+bwY/a2SC9MiPPJXQjB3JVq3N6QaWnO57IAsLV+Qz6X1fM5Xub3b659h1/V+zfXdtsbMvVpyHibTTHhnQ3iwCWORHA7qwo84Qo5ZZnqCJn9Cgrrtk+c50U+COAq8uikcacPOtXUGxFoM9zl5RUfr/2Cecf23VE/633CybzaNixZOOjGCSsnX1JzfOfUh5nj7mu3VrGfB44TgvAFQ4zd5qwEmIsHZjbgr08cf8Wt051nVgvCm7yuey0z9pgnN+9+qB37rVt6/cC74es1D7PDdD3MUj7GbTBOhJ6eY8z5db+Djz3c3CYAmm2DAGz4dNWZU9YsHbMPb2C0FSzOraTYvuwshP1inlWqmwLfC/0IzoOZZ+3f1jbAnsY1AAKaBoTAuXMalo7Zx0x2DIziEckDtdjuV9xuHNGWqtgdQ7dzBGGQzJkDghRIwN61CJIMAhYq4YhCkgFOpRCEAQqVEIRBvCwGCpWQmKC8UCmogU1XK9OQpzyCp9HBPkVJ6mPKMAnGJcRTYCRt5LwhPZtbKzq0lndMd+6aqejQ1LEyt3wjmVS3Y9W89IeXVNf0Sq+s73ONyGgU4/+e6W8i9pWS7IZMNjybY0UwFkPX8+Zlsby8Qz6fAyC5bCsvc8/1i9at3/O1E0Cnts26bofXpaZCdU0wQiV/0CconrIlSAKFSjxpjj8Hcle/VH/uW0WSJcnUDHznSMQiCUIlpljHIc1hBjSi8Sp4squE4yBLYtYsCOaEo4JHEoRKvJOSKTmSqc01JTR8y5LoQ8GsBwcGjyQIlWS0GTKCHjqzIEWc7qlyH2ULCSNoT8HlE49gLIanwEj55iaxUKlm5FRTqLRy8iU8oZIdwgrGA1TMEWYee83Q/oSjU2iYAiPXmu2J4pcq0GJdRxghXiU8a+lvXJUgAVgMT4GRAKA1nc5uXm1u00Kl1nRabCWYcwCZ+Y/rasFTfvlsvOWEOIVXbSDNoZVwBYVKCMIAhUoIwgDXXgjCAIVKCMIAhUoIwgCnUgjCAIVKCMIgXhYDhUpITFBMqOTJLbTYry2UaR2lS4qinlDJVTzkyBYhgj6gdCnmBCxUgraH2QoLlRAEiiFUIgSKLVTixU9yzEO8SnyYeUyYr0AXTHt8eOmhdClWBCxUqqzsGoJQiTk1J6yYRp4kPjzBE+2ZS0cOEOeRAaVLsSJgoRIxiGHoIQiVSPvoE5IqC7oS1zyCDvgoVTgoXQqHgIVKhBiEkPAjKsn8dwaVJ6hSFihdiiEBC5XsEZV4mQsUKgF1Y4onxHHMiGh9n0AGROeRCUJJp0iKouhdsyeidCl8FBMqOc4J5jbw5+viDJL1F0MUJVMJSpfCBIVKCMIAhUoIwgBXWgjCAIVKCMKgovAq7IQwB/v3vBu3rp1jPokiOhjEMAwgBiEEeh99zk/r/lz8g4YkH/WmUv/82+Gnj1wKegvRd0JuB8lt13Jpkk+T/M735kwaeu2qqDuIJIFgHvCFWbD7IWe+M+m4NothEMMgxCCGAYSQ3kcPD/HQIUlGPYuxduO2p2Z+fPUFJ+63d0cAqOygteSMHxpzT01ffPW5PzvkwH2j7iCSBCK+XetV4bT4s9SHX2286FfHdumodeqgAUBFuZbXIZMzWrJk2tufHn/UgScOqGHsZ2GiJR9BM2QyyHSJ+RhbZkfQuaMQojx2XhVOAPD8m8s6VVadOLCmqlNZZQcNADpWaNk8acmS5qyxaHmqtaXpsrMHc/fW17niw7vOtYjDA1L83ls6J570xSbilyHoet4w8oaR1zRN1/O6nsu07BLk37A53WPfvQgB3QDdILpBsjrJG6AT0AmcPODgDZvTwR4gf6dgUGetbzcQpEDYA8P302sfCqdsNpvNtgJANtvatGvHtoZNgvxbtjX1P3T/L/69st8vrpw89V/Z1tyPjruiorz8o6VfDxj6u9ffWPDLwT/21AFN02hnPguZUlp7JNuVMReCpmXiPDH3y7Htqc8lRcQWw2sopp3NrWVl2qV/fGjtP58Y+/hLHTpXAkDeACsllzfkWxdrjBySDzsOn0I7nnbfhzmyGvIUGkpGz4TYCcbt3HdBH6GYigot3xM7kBdCmOsE33qmkiVii9G4vWFr/YaG79cDwNb6Ddu3btrVKHKn3atLp1xen3DDpYcM/b8Tbrg0bxAA0A1ipXSoKOilo/RF1G5ACqmZ2VCAFXrdL0RMxHelTh90Kq1w+njtF7y7Uvc8884JA3sPOOwQc4a8O7ntJQytrc3Pzlx2+1WnM/aTE6le8p0AzNcdiG860Q0J1LC8e028Fy+AxCpF3CK9j4idKJ98e1U4AUDvntW5ps3NTR2bspU50gEACCkDMDqU5fbqmPlq9frePauZBeVv7zBPuMLfbOBVSlVIiqcjgDBR7Hb44s9SX65a/bsze2T18qxeAQAGKSsrMzqW5zuW6U/P2XL04YcxH/B5OCLCJ2jRvt2w8P4jkqgnVFr8WeqN97+o7KBpmtlzAqARorXkyDmn9C9wVCCIiWIWA0HCIV5hABAkJgQcUQlBkgFOpRCEAU6lEIRBZBZj0UPHWdsnjV4a9XFAkHZEE1Fp+u/7XfDfa3hfBZgP3ex/mXmA/9JlnDoiMkQQUWnRvcf97KorASCTzmQymUw6nUlnGr76wJ7npNvYNkRmYACIBHc+3LxxLJUgEURUaoU8dB4IAJ17QefdiTW1e6JhLHriuqgPC1LqRBBRCbIAmXpBbetXb+P9xHtRuWuMJX8pzLaQUiAYi2EY+aqqbvaUtWs+t1dl/5sBgEzayjn78UcdtXXbr9v0mwea2xc8vJxuzqEuYE6TmCniUvSGeMKGJJgIIiq17my1BsbsSc8Ou2EUs850Or34+SmSHZDUZ+KJjkgSQUSlTLYVIAMAsydNGTby13brYZHOwOLnpzDNBRM815FgiSCikmkxZj8/Z9hl5zMj7aWhs9dRIY6kKo6NRM+1mCGLcOyVFMG4nXt6jvHnCw84uKbHsMvOZP6ahmpPowJBikE0E+5nrzlC8OsVE1dGdjwQBAACFyohSDLAWzQIwgAjKiEIg7gIlXAoIrECp1IIwiAuUym0GEisUM9ioMIJCYGA30TolTAVTtD+MTb9kkzBazxl3sbpqEfwQnLlLkYliEoRlQpUOAHl3+FwEuGpoGT8Dmk3eFfXXSTORGwxLIVTeXmHfD4XicLJ7mRuJXqNuCeotsB6kEgIOD6GV+wKp2y2tXgKJx4yoYkcUTLsv/oIzIcoQcQWw65w6tKlKxRT4WSfJjkS5TssPxJkljFIbInYYniKqFQMhRPIxQWGgGZBOI9ShYgthqVwAoCt9RvCVziZiE96u6jDE2gi1CVii2EpnBbMndKwaV2YCifLDjATmYOBt562bzBf14AvVVCOiN3OUeGExBPFrmGocELCIS5CJZRGIbFCMYuBIOEQF+9aBIkVKFRCEAY4lUIQBnGZSqHFQGKFehYDhUpICJSQUIlWXNgz0M6FvHqYpVCWlDBKSKhEi5B8y4lQlpR44iJUguhCMQVy7qIsKWHESKgUYSgmO/Rr0u2VyO8a+tUqTYyESiZhhmIC/jsQrFABkjuCsqSEERehUlShmKCYi2OcR6lLXIRKUYViMglKnYcmIjHERagUfigmWqhkT3G9XYuypGSDQiUEYaDYVQ2FSkg4oFAJQRgoZjEQJBzi4l2LILFCeaESjmGkGOBUCkEYxGUqhRYDiRUlZDFQ4YTIE7FLiO8WQw7FBMKIGeKH5YiKKGkxwlQ4tR0mN/8OdABJGKpajDgonJAEE7EToe8WQ1M4MWHOnXBClSRUtRghK5wcMD3MUeSdJFS1GHFQOCEJRtXnGI3bG7bWb2j4fn3DpnVb6zds37ppVyN3KrVb4ZSZPenZNoUT9TFHBXqtIyaqWozQFE60Mgk4UiRcYyQJVd3OUeGEFJVSWSmiwgnxBmHxj6kTSbj4bjH8riKlQKlYDATxhKp3pRCkqMRFqOSbovqr33ffffX1K3ifiy66KOq9R4oFTqVE3HfffWPGjOH9Wl+/4oYb/jRt2rSou4kEj/JTqQgVTr16Hfn443eh3Ugk7IER/wd8ERa0M2vWwr59++KbOZMHWgwpvl6zNrObpqamTCbT3Nw8Y8Hy4cNP7tu3L7OItht/3ePFJ/BUxF+XHBnkdyRJFwi0GFL03HfvioqKioqKfD6fmXR6RUVFx44d121q6NXryEGDBjGLmLfD/fWNeYYRN6WUa517btLzM9OjQn5HkrReRYshRS6Xy+VymUym+cHD84edlclkcrlc466mYhwKf47rQZ2UvHqSdNLLoKoTYcgFs9lsNpvN5/OZq5ZUVVWl0+mqqqrGxp0+2qV9DeWDYpIC4jwRm0Ld01nOU71L7pe9z8QWy9PHoQuTUrcYgr/D7pm+yDh82D3Th90zfdQLy5qbm//w2Ku3TXpz7KSZ5eXlk2YsSO9s9NqoNTOxO+1acxViC5zpwJ7ocF7w0QFPRWQmYMB5WYRjJHiNUxUh+ByDyz6njbV//fL5UXdPntPYlNm7qnNLa278VWf98fEprzx86yeffDJ48GDBld5xESWU0M9xEeUZkMJfyCA5Khx9kzc1vPiGREFtY+laDFe2/2vCOVdvsj5jFo7rVFm1f/f9OlVWVVdXd+3aNZA1Bn0RtRuQAHcn5PNSIePA7r+6XQ8B7Z5h9q8nr2znu37TiAvPO+3nPIvBWwnI2wfwYjHolYA4Pi3vKs6sR1wzr4c+7q3FB1VfhhBCV5eM/vkHjqSeS0546APJ4vK3d5gnnI+VgDjFdelSSIqnI6AEaDG4vHVp30OOPdKesvbTFWe99K0jm3iNIYP4to/kTaEIiX8PfYBrDD7p7Wvf/cD+gfT2wmulEd9f8nf3KUzi30MfoMUQIekg+Oqrr+JhTBpMXR9KW5ESR3mhEoIUA5xKIQiDUll8a5rWsXNn8SdJXtNIgZSKxdA0rduoqeI8O/56SYkcDcSVUrEYIUMrewrULcWKZOyFyz6WyDVS8v8ywKPB9JuQcViKm7Nd3PoTDiVkMVzv0IW8y0icKZWLgXnZc8hl7BCOFoJ28mNqbnjZwM0RkOdTyPt/keyPo2YZV0XxfhGOE6R4L0BZP5GEWAzxXwvLMsibC3t+x38/obz0HFXZSzGhdUtWc17743DzZuqEHG3JaIno/vDmh449Vd0Oo8Vog/DVc7S6SFJvxMxDX7CtDjDzeOqPpz4zjY/MukhyL0BZcwGJsRiS+LAYXiv3escm2itrUK37sJYxBy1GG2KLYeWhE+kKHVMjsV5HULnAGtiL8JYlMqsXZj95Cy3x2onZJVDWaKDFkLpk0nkcZXlfmW3RV1Zm5da2uD+8XRBXS5cVHArX5hyJwZriSCghi9GhUyfra661lZmNd7GE2Fz5/PUnbnsRf0rFYhBCspmM9SEcmAVjdeXz15+47UX8KRWLgSCeKBWLgSCeQKESgjDAqRSCMCiVqRQKlRBPlIrFQKES4olSsRhIgJSCaS0hiyGTrUSOhidQqLSHRFoM4kbIu4zEmVK5GATiRAhCGRBdP+GIh3j1gIT7HQqVwiEhFqN4QiV7Qft/vPmVJ12yzipmKataHxIfe/9RqFQ80GK0IbAYICFC8iQeclRrdYDZFm9fJNtCoZI/EmIxJCnQYhTjbgzdgeK1JdO6intRDNBitFHIGoPORud35OGtOmSu4ihUCgG0GO6XTGY2uhRhwauKl0KXZfaNWUSQx7XPILQers257oVylJDF8CdUihsoVAqHUrEYxK9QKW7466pCOxgTSsViIIgnSsViIIgnUKiEIAxKeiq1/LNFi7/7aA05rJ+2+sSDhgwccFLUPULiAntgFC+qPA/fLcoUnP3YKXTigbX3Tt6Qvv5HP/Q+8Ij/t6zh47KaJw5M49hATErCYsx+7JSh173nSJy64qvLDt175bdvbavakW7p/uKCamODMfW+i6PuLBILSmLxrRuMZ9Kfrl//2saWZds6r121cPPSafvWN5U1++x8UKGSkhR1SXUqmKkhz6MKaVGmYJ5oll0kQDTQzG9P1lf13Njrx+9nM536b4LqPnt9668PQTkF0f4USFSUhMXI6WU6ITohPz33v0bf/3fdgNH3P3NOF2P/9Ru2bOmzscuodbsGVez68icH5UPeayS2sAdGwixGztAMAwyD/Pa82neXfK4T8u6Szz9ak50wuMuA/Aetue+7V/9w2mD43bV/pMua12/7XyudGX6S1wfrV8cGzp3iSUIshvhvVi/TDdAN7brfnAsAf3l+BgBc95tz9+/df9yoEaf9aNYTD//XyFFj5RsVSHN4Z7nDcdC+obR7dlIpibtSf7u77qIb3zS3J74884UZ8397Xu01/zkcQAOAaX8++9o75omOEd9XHCjncPGrA+joSva/dB4kKpS3GDJkjTLdIObHHBUvzJivG5qZktPdH//LOJC7YteEIDFH+TWGDLm2qRQ8PXUWAFxx0TkA8PTUmWZi1vDsF2Oe347lgfmVaVWAWp8wq6XXIUhUlIbF0DXdIIYBL8yYf+oJx+iGduoJx7wwY75OTIvhcgpaKwFHoli+wxMJ2Tfov2r5wCeYkpjO3n3r8BE3vwoABEDTAAgBDYj5PINozz3yf+64742o+4jEi5KwGHlDM59jGIQYBjEI6IZmEGIYQAjJe59KIYmnJCzG2FvOE2eY8OCMqPuIxAvlvWsRpBjgLAJBGCg2lfrjK+z0B9BbHAkU9RbfD1zc7gMA+zTDCXfsCLnDSLJR+wFfYxMAwM+OguF9u+HYQAJEPYsBAJN2Y349fUhBYyOSZ8w859xidIZXc1F3XPUn90oKlS651Jn59CHmv936XLVi3TNHemo6klUW7TQlr1Ly6mXIq9nfjku2rtbalYY9MOJ8u7axCaa+1GYrzj5/JAAuMJDgUe+u1NizAQB27dZnt+YgY3sP7RkTRBaD94pyXgovQpIFLclglgKOp7r9q9W6439E/NJyptkBjqu8eMeZ++5arcxxVvHl5/FaY8gERtrVDLuaYfiZg82PNSqaWqCpRdQET10kyEM7BdJ+fvZ0XoAl6yvtaCh2RKf77PBoZPod0qGbaOhfZYIwMf0pZSpXzjNSPYtx46kAAK05+I/hg194dRkALPxn27A59qSRFz7sbjFAeJF2vdYyq+XJlWhHdLpagUqJd9mW7I840bUtmR5K9kG5AEvxshgytOagNbfna1MLHHvSSPOT3iUqKHMd5YXJC+olID6qCvNaW7y2/O17hCh5V8qyFebc6dNFbYOq70BRJYSKy+iax/6Tq2YV2s9wHG0xdUvMcHiOmQxtwZgzPd5e0Htkb9G+U8xStNEgrGCW4v8vhcaDhXoWw1xU/PY/BlspfQeOND+uZWVkQITCSnStWdAW7yuzRXodwqxcZk+Bsw4RVMvrIbN1GfMic9jjhnprjCuGtFtk26dPzRn4/XOyzzGCCjKEwYrsJOZoqPcc44wJKwJpMaj/OdXPgGBJzNFQzGIgSDiot8ZAkBBAoRKCMEjCVAoDIyGBo5Lm+8O3bnKk9Oh7ZmNrJQZGQgJHJYvx4Vs3HTv0wT1d1zQAmPL1lxgYCQkclRbfulFmmO+GIsQgRNNA07wFRpJ8BBtghKTwjiASKCq5hOhGhWEzb5apkw+MJGkeA3SOKu5RQ4qGShYjr5fpOlifTNbIZA0MjIQUA5UsRt4oM9qnHNp/KAB8OPuRv775weZcpnu1MeDH7MBIIK2e4Wmj7b53rm58rs2pqN0pKeJlMcR/80a5rhP7xyy774FH337NiJuvGiQOjEQ7zAHlDs1zOyd86ZJkc0C55YGCztilg0p3pWZOHf/zM2+1pxx5bB0ArPh0HgB8MOf+cy8Z57K3lHrG4TvN3LDy2y//MsdNLNaRDMKEREK8LIaYnF6RN8D+MTG3c3qFaw3+cLhM+5YuoX1QCJVeuJbTywwDDAP6D66zEs8fXmcmukYMc0ReZX4lu0Ml0SnMwK2ODXHrvHdJobmIISpZDN0oN6PmAUD/wXXm8Kg9afDu+Hrl4uICpQ4zXZwzELGOWtqdkkIli5HXyw0CBoHHHrjdTHnsgdtPPPlkg4BuQF4vd60hHCzj4HrPCqdVsUUli5HfHXz1+BNPWrp4ztLFc44/8SQzxYhTYCQZGadyUs9SQ6UJ7sSJj4szXHPNDVH3EUkIKnnXIkhoxGX6gSCxQqWpFA8UKiGBo9JUCoVKSGioZDFQqISEhkq3awsXKhUDf6qm4sVPQgJBJbfzwoVK/vwvxKV47k+upQAf8MUYlSwGCpWQ0FDKJcQoMwAMgEP6D7USL7760QmDuwzIf9Ca+7579Q+nDXYRKjHd+Bxf7YmSvht0PdDeyxDnTmoRL4shKVQCAGP3BzwKlQQiJCsb7SDoOgFz1EOXslJwbCiBSnelLKHSkcfW/c/nb5uJhx7zq0KESta2Q4PK1DO5VsuLPGRJOKy/kjUjUREviyHGEioBwMH9hpgfKEyoxHMFx+t6iaPSXSlTqGTyzYql5saRx9aZia5CJaBeYkBPfpjjgQhjCElGHnLAjHKExAeVLIZdqJTNt30AQFKoZMK0DwKVEl2K+ROtXoL2qib6L68tJA6oZDFMoZKJOTzKyzQAMAgQEiOhEpIAVLIYllBp6eI5OZ3kdJLJGUsXz4mbUAlJACrdFUGhEhIaKnnXIkho4PQDQRioNJXigUIlJHBUmkqhUAkJDZUsBgqVkNBQ6XZtTIRKrn6yKF1KACo94IuDUEnGBRClSwlAJYuBQiUkNFCo5E2oJO8xjtIlpYmXxVBFqCQzJUPpktKodFcqJkIlmVGB0iXViYvFkCEOQiU8cUuEuNyVkiE+QiX7T4DSpSSiksWIg1CJKTBC6VLyUMlioFAJCQ2VLAYKlZDQUMli6EbZOzMFIxYHBhIYcfGuRZBY8b+Bx6IYRnorBgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAxMi0wMi0wOFQxNjo0ODo0NyswODowMEkzGrcAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMTItMDItMDhUMTY6NDg6NDcrMDg6MDA4bqILAAAAAElFTkSuQmCC" alt="" />

FirPush.java是自己写的一个触发推送动作的类,它是一个servlet,请求该servlet就触发向特定的用户推送信息的动作(当然,怎么触发推送动作还有很多种形式)。
web.xml代码如下:

<span style="font-size: x-small;"><?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<servlet>
<servlet-name>pushlet</servlet-name>
<servlet-class>nl.justobjects.pushlet.servlet.Pushlet</servlet-class>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet>
<servlet-name>FirePush</servlet-name>
<servlet-class>com.mysrc.FirePush</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>pushlet</servlet-name>
<url-pattern>/pushlet.srv</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FirePush</servlet-name>
<url-pattern>/FirePush</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app></span>

Ok,接下来就是要进行修改了,首先打开ajax-pushlet-client.js。PL对象,在它的最开始添加一个属性userId:'',,因为分析ajax-pushlet-client.js之后会发现,所有的请求都是get方式,也就是说是将请求参数添加到url里的,我们要做的是在进行join请求的时候将userId加到url上。找到PL的_doRequest,它是一个函数,所有的请求都是通过调用它发出的,找到var url = PL.pushletURL + '?p_event=' + anEvent;这一行,这儿就是在构造请求参数,在它的后面加入代码:

if (anEvent == 'join' || anEvent == 'join-listen') {    url = url + '&userId=' + PL.userId;
}

好了,ajax-pushlet-client.js的修改就完成了。
接下来是test.html:

<html>
<head>
<script type="text/javascript" src="ajax-pushlet-client.js"></script>
<script type="text/javascript">
PL.userId='piero';
PL._init();
PL.joinListen('myevent1');
function onData(event) {
alert(event.get("key1"));
}
</script>
</head>
<body>
This is pushlet test page....<br>
</body>
</html>

然后就是修改pushlet的java源代码,找到nl.justobjects.pushlet.core包下的SessionManager类,将它的createSession方法改成:

public Session createSession(Event anEvent) throws PushletException {
// Trivial
//return Session.create(createSessionId());
return Session.create(anEvent.getField("userId", "visitor"));
}

这儿就使得建立的session的id是发送过来的userId,而不是一个随机字符串。getField的第二个参数是当得不到请求参数userId的值的时候设定的默认值。
好了,所有的准备工作都完成了,接下来就是通过userId给特点的用户推送信息了。
FirePush.java代码如下:

package com.mysrc;  

import java.io.IOException;  

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import nl.justobjects.pushlet.core.Dispatcher;
import nl.justobjects.pushlet.core.Event;
import nl.justobjects.pushlet.core.SessionManager; public class FirePush extends HttpServlet { @Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
myUnicast();
//myMulticast();
//myBroadcast();
}
private void myUnicast()
{
if(SessionManager.getInstance().hasSession("piero")){
Event event = Event.createDataEvent("myevent1");
event.setField("key1", "houhou_yesttttt....");
Dispatcher.getInstance().unicast(event,"piero"); //向ID为piero的用户推送 System.out.println("success....");
}
else {
System.out.println("piero do not login....%%%%%%%%%%%%");
}
}
private void myMulticast()
{
Event event = Event.createDataEvent("myevent1");
event.setField("key1", "houhou....");
Dispatcher.getInstance().multicast(event); //向所有和myevent1名称匹配的事件推送 System.out.println("wa success....");
}
private void myBroadcast()
{
Event event = Event.createDataEvent("myevent1"); //向所有的事件推送,不要求和这儿的myevent1名称匹配
event.setField("key1", "dig hole....");
Dispatcher.getInstance().broadcast(event); System.out.println("asw success....");
}
}

这儿主要利用了dispatcher的unicat/multicat/broadcast方法。
好了,值得一提的是在ajax-pushlet-client.js有publish方法,也就是上面提到的触发信息推送动作,其实完全可以在前端调用这个js的publish函数向订阅了某事件的所有网页推送信息。test2.html代码如下:

<html>
<head>
<script type="text/javascript" src="ajax-pushlet-client.js"></script>
<script type="text/javascript">
PL.userId='juvenh';
PL._init(); PL.joinListen('event223');
function onData(event) {
alert(event.get("eventVal"));
} function sendnews(){
//PL.publish("myevent1","key1=dlut&ba=ls");
p_publish('myevent1', 'key1', 'dlut', 'ba', 'ls');
}
</script>
</head> <body>
This is my JSP page. <br>
<input type = "button" value="发消息" onclick="sendnews()"/>
</body>
</html>

上面代码中的PL.publish和p_publish完全等效,查看p_publish的代码,其实也是构造请求url。这儿的publish方法只能向订阅某一事件的所有网页推送消息,也即等同于multicast方法,无法向某一个特定的用户推送,解决方法还是向上面那样修改pushlet的java源代码,在nl.justobjects.pushlet.core包下的Controller.java中的protected void doPublish(Command aCommand);函数,看一下就会发现,这儿就是调用了dispacher的multicast函数,这儿改成unicast,前提是上面的js的publish里提供了userId。

Pushlet实现后台信息推送(二)的更多相关文章

  1. Pushlet实现后台信息推送(一)

    Pushlet是使用较多的后台向前台推送信息的工具.前台订阅某个感兴趣的事件joinListen,触发后台的Pushlet的servlet,为该请求会话建立session,默认这个sessionID是 ...

  2. iOS刚进入后台接受推送、打开推送调转到相应的界面

    刚进入后台的时候消息处理时候我用了本地推送!可以看我前边写的博客,怎么处理刚进入后台接收推送的案例,链接 /** 注释:打开推送的三种方式:-peter 1.apns的时候,结束进程退出后台:启动的时 ...

  3. 使用SignalR ASP.NET Core来简单实现一个后台实时推送数据给Echarts展示图表的功能

    什么是 SignalR ASP.NET Core ASP.NET Core SignalR 是一种开放源代码库,可简化将实时 web 功能添加到应用程序的功能. 实时 web 功能使服务器端代码可以立 ...

  4. 李洪强iOS之集成极光推送二iOS 证书 设置指南

    李洪强iOS之集成极光推送二iOS 证书 设置指南 创建应用程序ID 登陆 iOS Dev Center 选择进入iOS Provisioning Portal. 在 iOS Provisioning ...

  5. EasyPusher手机直播推送是如何实现后台直播推送的

    本文由EasyDarwin开源团队成员John提供:http://blog.csdn.net/jyt0551/article/details/52276062 EasyPusher Android是使 ...

  6. PHP Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用php实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

  7. Ruby Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,怎样用Ruby实现最方便呢?我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推 ...

  8. Android消息推送(二)--基于MQTT协议实现的推送功能

    国内的Android设备,不能稳定的使用Google GCM(Google Cloud Messageing)消息推送服务. 1. 国内的Android设备,基本上从操作系统底层开始就去掉了Googl ...

  9. JAVA Web实时消息后台服务器推送技术---GoEasy

    ---恢复内容开始--- 越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 ...

随机推荐

  1. python-GIL

    全局解释器锁GIL:在同一时刻仅有一个线程可被调度执行.对于单核环境,该实现简单高效.对于多线程的并发应用,一般通过多进程加协程充分发挥多核计算能力. 对于I/O密集型任务,线程发生阻塞时,会自动释放 ...

  2. 代码:jquery自定义插件 demo

    jquery自定义插件 demo 2016-1-13 只是一个简易的示例 <script type="text/javascript" src="http://cd ...

  3. scrapy工作原理概述

    当运行scrapy crawl spider 时,会生成一个crawl命令对象,scrapy是调用execute函数(cmdlin.py)来执行命令的,execute函数会给命令对象添加crawler ...

  4. Ubuntu 下安装 Swoole

    环境:Ubuntu16.04 apt-get update apa-get install apache2 php php-pear php-dev mysql-server gcc apache2 ...

  5. springboot 停止

    因springboot内嵌tomcat或jetty使得我们没法去操作服务: 因此,常常是服务起来后,要重启时会端口占用,我们只能无情的kill掉端口. 不过spring也设置有配置停止的请求: App ...

  6. VB-创建类模块DLL文件

    最近需要调用MSCOMM32.OCX控件,但是ABAP调用过程中发现无法同时发送多条记录,则需调整实现方式: a.创建DLL文件封装MSCOMM控件相关属性及方法 b.系统注册DLL文件 c.ABAP ...

  7. Linux下Mongodb安装和启动配置 原

    1.安装 略 2.配置 01.mkdir /usr/local/mongodb/data 0.touch /usr/local/mongodb/logs 03.cd /usr/local/mongod ...

  8. touch修改文件时间戳

    https://blog.csdn.net/lsbhjshyn/article/details/51443304 touch -t 20181011000.01 text.txt

  9. epoll_wait 时 POLLERR 与 POLLIN 同时返回的现象解析(转)

    今天code review时,同事B对我代码中的poll()的处理做法提出了异议.于是做了些研究,还发现了一些好玩的故事. 异议的代码 我的代码是参考manpage写的,类似下面的做法.同事B说没有处 ...

  10. JAVA仿百度分页

    最近在做一个仿百度网盘的网页小应用,找到了一个优雅简洁的分页插件,和百度搜索的分页很相似,对他进行了二次封装,拿出来跟大家分享下 插件源码 /** * This jQuery plugin displ ...