Channel.me:这是一个神奇的网站

Channel.me 是一款基于 web 的在线协同合作工具,允许用户邀请朋友或同事一起访问和编辑网页,实现实时交互与讨论。只需输入网址,即可创建短链接,支持 Chrome、Firefox 浏览器。

电脑上的远程协助功能,相信不少人都用过,对于很多菜鸟级网民来说,让好朋友异地帮忙修电脑似乎很神奇,但是一旦授权给对方,只能看着他操作,缺少了交互的乐趣。今天介绍的Channel.me却能让身处异地的人同时访问某个网页,而且可以随意在网页上进行编辑、标注、讨论和留言等。

Channel.me是一款基于web的在线协同合作工具。功能很强大,用法却很简单,打开Channel.me网站,不需要注册和登录,只要在主页的地址框中输入想要跟朋友或同事一起访问的页面地址,然后系统就能自动创建一个短链接。

 

 

用户通过Facebook、email等方式将这个链接发送给邀请对象,对方收到信息后,不需要下载和安装插件,就能直接进入你所在的页面。

完成这一步后,你和你的朋友就能同时浏览同一个网页,更神奇之处在于,参与协同访问的所有人在页面上的一举一动都能被其他人实时看到,比如对某段文字进行高亮显示、对页面的某个细节提出修改意见等等,大家可以通过页面中的即时通工具互动。

从上述功能可以看出Channel.me的使用范围相当广泛,看到好玩的页面可以邀请好朋友一起分享讨论,也可以用它来进行远程会议、新产品讨论、对手网站分析……总之如果需要远程协同服务,Channel.me都是个不错的选择。

目前Channel.me主要支持Chrome、Firefox浏览器,IE、遨游等则会出现打不开的现象。

华太师 供雷锋网专稿,转载请注明!)
[AbstractEventExecutor.safeExecute: 168] [] - A task raised an exception. Task: reactor.netty.channel.FluxReceive$$Lambda/0x00007fc020f426d0@63bff278 java.lang.IllegalStateException: channel not registered to an event loop at io.netty.channel.AbstractChannel.eventLoop(AbstractChannel.java:163) at io.netty.channel.AbstractChannelHandlerContext.executor(AbstractChannelHandlerContext.java:132) at io.netty.channel.AbstractChannelHandlerContext.findContextOutbound(AbstractChannelHandlerContext.java:1079) at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:821) at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:953) at io.netty.channel.AbstractChannel.read(AbstractChannel.java:289) at io.netty.channel.DefaultChannelConfig.setAutoRead(DefaultChannelConfig.java:341) at reactor.netty.channel.FluxReceive.drainReceiver(FluxReceive.java:338) at reactor.netty.channel.FluxReceive.lambda$request$1(FluxReceive.java:136) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:405) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:998) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) at java.base/java.lang.Thread.run(Thread.java:1583)
10-18
`java.lang.IllegalStateException: channel not registered to an event loop` 错误通常表示尝试对一个尚未注册到事件循环(Event Loop)的通道(Channel)执行操作。以下是一些可能的解决方法: ### 确保通道正确注册 在使用通道之前,要保证它已经成功注册到事件循环。从引用[1]的源码可知,注册通道时会进行一些检查,如事件循环是否为空、通道是否已经注册、事件循环类型是否兼容等。 ```java // 假设已经有一个 EventLoop 和 ChannelPromise 对象 EventLoop eventLoop = ...; ChannelPromise promise = ...; Channel channel = ...; if (channel instanceof AbstractChannel) { ((AbstractChannel) channel).register(eventLoop, promise); } ``` ### 检查注册逻辑 确保注册逻辑在正确的位置被调用,且没有异常导致注册失败。在注册过程中,可能会因为事件循环不可用或其他异常情况导致注册失败。引用[1]中,当事件循环为空、通道已注册或事件循环类型不兼容时,会设置 `promise` 的失败状态。因此,要确保这些条件都被正确处理。 ```java if (promise.isSuccess()) { // 注册成功,可以继续操作通道 } else { // 处理注册失败的情况 Throwable cause = promise.cause(); if (cause != null) { cause.printStackTrace(); } } ``` ### 避免在注册前操作通道 在通道成功注册到事件循环之前,不要尝试对其执行需要事件循环支持的操作。例如,不要在注册之前调用需要事件循环处理的读写操作。 ### 检查事件循环状态 确保事件循环处于可用状态,没有被关闭或异常终止。如果事件循环不可用,注册操作可能会失败。 ```java if (eventLoop.isShuttingDown() || eventLoop.isShutdown() || eventLoop.isTerminated()) { // 处理事件循环不可用的情况 } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值